как использовать объект файла в качестве аргумента в строке Popen (файл является только переменной, а не фактическим файлом) - PullRequest
0 голосов
/ 14 мая 2019

Я конвертирую некоторые из моих сценариев bash в python, и сценарии в основном использовались для запуска инструментов командной строки.

Я понимаю, что Popen - рекомендуемый способ, но я получаю ошибки, если пытаюсь применить методописанный ниже, так что, может, кто-нибудь объяснит мне этот простой пример.

bash code:

varA = 50
command1 > file.foo
echo $varA | command2 file.foo

python code:

varA=50
com1 = Popen('command1',stdin=PIPE, stdout=PIPE)
com1out = com1.stdout  #NOTE com1out is of 'file' type

com2 = Popen('command2  %s' % com1out),stdin=varA, stdout=PIPE)

1 Ответ

0 голосов
/ 15 мая 2019

Код оболочки

command1 > file.foo
echo $varA | command2 file.foo

использует обычный файл file.foo, а command2 ожидает имя такого файла в качестве аргумента, поэтому прямой перевод на Python:

from subprocess import *
call('command1', stdout=open('file.foo', 'w'))
Popen(['command2', 'file.foo'], stdin=PIPE).communicate(str(varA)+'\n')
...