2016-12-08 2 views
0

У меня есть следующий код, где я хочу поместить все папки в определенном каталоге в список для пользователя на выбор. Ниже у меня есть рабочее решение, но я обеспокоен тем, что может быть возможно изменить информацию stdout, и я не хочу, чтобы жесткий список моего списка игнорировал информацию stdin.Python: Как избавиться от строк stdin в stdout

Линия ниже lineList = lineList[6:-3] - моя забота.

sshCommand = "plink [email protected] PASSWORD" 
lsCommand = "ls -1 --color=never -d */\nexit\n" 
sshProcess = Popen(sshCommand,shell=False,stdin=PIPE,stdout=PIPE) 
sshProcess.stdin.write("cd /mnt/PCAPS/GroupSetup\n") 
sshProcess.stdin.write(lsCommand) 
sshProcess.stdin.flush() 
lineList = [] 
for line in sshProcess.stdout.readlines(): 
    line = line.replace("/","") 
    line = line.strip('\n') 
    line = line.strip('\r') 
    lineList.append(str(line)) 

lineList = lineList[6:-3] 
while(True): 
    x = 0 
    for line in lineList: 
     x+=1 
     print "(" + str(x) + ") " + line 

    network_name = raw_input("Please select which network to use: ") 

    try: 
     network_name = lineList[int(network_name)-1] 
     networkCorrect = raw_input('You have selected %s. Is this correct? (Y/N): ' %(network_name)) 
     if inputYNChecker(networkCorrect): 
      return network_name 
     else: 
      print "\nPlease select a number listed above.\n" 
    except: 
     print "\nPlease select a number listed above.\n" 

Это дает мне следующий результат, который я хочу!

Using username "root". (1) A (2) B (3) C (4) D (5) E (6) F

Однако, когда я не имею lineList = lineList[6:-3] в моем коде, я получаю:

Using username "root". (1) Last login: Thu Dec 8 13:59:51 2016 from 255.255.255.255 (2) cd mntPCAPSGroupSetup (3) ls -1 --color=never -d * (4) exit (5) ←]0;[email protected]_Control:~[[email protected]_Control ~]# cd mntPCAPSGroupSetup (6) ←]0;[email protected]_Control:mntPCAPSGroupSetup[[email protected]_Control GroupSetup]# ls -1 --color=never -d * (7) A (8) B (9) C (10) D (11) E (12) F (13) ←]0;[email protected]_Control:mntPCAPSGroupSetup[[email protected]_Control GroupSetup]# exit (14) logout (15) ←[H←[2J

Есть ли лучший способ избавиться от «мусора» возвращения на стандартный вывод кроме игнорирования конкретных строк?

+0

Ваш код пытается найти папки и файлы в удаленном месте или ваша треска e на том же компьютере, что и папка и файлы, которые вы пытаетесь получить. – MooingRawr

+0

Он подключается к удаленному серверу, переходит в конкретный каталог, а затем перечисляет все папки в этом каталоге. Я изменил имена IP и папок в приведенном выше примере. – Kevin

+0

Возможно, создайте регулярное выражение или другую функцию фильтра, чтобы определить, следует ли печатать строку. 'if should_print (line): print (" ({}) ". format (line))' – sytech

ответ

0

Чтобы исключить информацию о stdout, которую я не хотел, я решил использовать функцию -m plink, которая читается в файле как bash. Я исключил команды stdin.write. Сейчас я только следующее:

sshCommand = "plink [email protected] -pw PASSWORD -m getNetworkName.txt " 
sshProcess = Popen(sshCommand,shell=False,stdin=PIPE,stdout=PIPE) 

Где getNetworkName.txt содержит:

cd /mnt/PCAPS/GroupSetup 
ls -1 --color=never -d */ 
exit 

, которые были командой, которые я ранее пишущая с sshProcess.stdin.write()

Это, в свою очередь, дает мне чистое возвращение

(1) A 
(2) B 
(3) C 
(4) D 
(5) E 
(6) F 
Смежные вопросы