напечатать что-нибудь в той же строке, что и вывод подпроцесса - PullRequest
0 голосов
/ 09 декабря 2018

Я пришел с этим кодом:

import os, subprocess, sys

location = os.path.dirname(os.path.realpath(__file__))
file = os.path.basename(__file__)

#print location # + r'\' + file

user_in = raw_input(location + '>')
if user_in == 'cd ..':
    proc = subprocess.Popen('cd .. && cd', shell=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin= subprocess.PIPE)
    new_location = proc.stdout.read() + proc.stderr.read() + '>'
    #new_location = str(new_location) + '>'
    new_location = new_location.replace(r'\r','')
    new_location = new_location.replace(' ','')
    print new_location
    #new_user_in = raw_input(str(new_location) + '>')
    #subprocess.Popen('cd .. && ' + new_user_in, shell=True)

Но когда я запускаю его и ввожу cd .., я получаю:

D:\Documents\Programmed\DesktopUnsorted
>

Я не хочу этого, потому что яхочу это сделать:

D:\Documents\Programmed\DesktopUnsorted>

РЕДАКТИРОВАТЬ

Я также уже пытался: new_location = new_location.replace(r'\n','')

Но это ничего не меняет

Спасибо, Стефан

1 Ответ

0 голосов
/ 09 декабря 2018

вы перестарались с заменами, используя префикс r.Python пытается заменить буквально \n и r, а не контрольные символы.Это работает:

new_location = new_location.replace('\r','')

В любом случае вам будет лучше использовать rstrip, который удаляет все символы пробела / перевода строки / возврата каретки:

new_location = proc.stdout.read().rstrip() + ">"

Кстати, ваша оболочка недействительно работает, так как cd в подпроцессе не меняет каталог для вашего текущего процесса Python.Для этого вам нужно os.chdir.

Я бы улучшил его как:

user_toks = user_in.split()
if len(user_toks)==2 and user_toks[0]=="cd":
   os.chdir(user_toks[1])
   # next command
   user_in = raw_input("{}> ".format(os.getcwd())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...