2015-11-18 2 views
0

Я пытаюсь написать скрипт python для проверки четырехзначного пинкода с принудительным форматированием (и паролем) при подключении к локальному хосту. Команда, которая должна быть запущена в:Выполнение команд bash в ошибке python

echo password pincode | nc localhost 30002 >> /tmp/joesPin/pinNumber

(записывает ответ в новый файл).

Это сработало, когда написано как скрипт bash, но я борюсь с модулем подпроцесса в Python.

import subprocess 

password = "UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ" 

for i in range(10000): 

    pincode = str('{0:04}'.format(i)) #changes 4 to 0004 
    subprocess.call('echo', password, pincode,'|','nc localhost 30002 >> /tmp/joesPin/' + pincode,shell=True) 

Я хочу, чтобы позвонить:

echo UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ 0001 | nc localhost 30002 >> /tmp/joesPin/0001 

ответ

0

Существуют различные способы перенаправить вывод команды в Python.

Вариант 1: Вы можете установить аргумент stdout команды subprocess.call и написать выход где-нибудь.

Вариант 2: Вы можете использовать subprocess.PIPE в вызове Popen и сохранить вывод для использования с другой командой.

proc = subprocess.Popen(['echo', password, pincode], stdout=subprocess.PIPE) 
output = proc.communicate()[0] # now contains the output of running "proc" 

file = '/tmp/joesPin/pinNumber' 
with open(file, 'a+') as out: 
    subprocess.call(['nc localhost 30002'], stdout=out, shell=True) 

stdout Установка поля в subprocess.call записывает вывод подпроцесса в файле дескриптора приведены в stdout.

Чтобы использовать выход 1-го процесса в качестве стандартного ввода ввода 2-го процесса:

proc = subprocess.Popen(['echo', password, pincode], stdout=subprocess.PIPE) 
output = proc.communicate()[0] # now contains the output of running "proc" 

file = '/tmp/joesPin/pinNumber' 
proc2 = subprocess.Popen(['nc localhost 30002'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True) 
proc2.stdin.write(output) 
result = proc2.communicate()[0] 

# now you can write the output to the file: 
with open (file, 'a+') as outfile: 
    outfile.write(result) 
Смежные вопросы