Как использовать поток данных из Bash с подпроцессом в Python - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь вызвать процесс в linux bash, используя сигнал потока данных '<', чтобы использовать файл в качестве входных данных для приложения. </p>

Однако это приложение не получает свои входные данные из файла. Я использую это:

#the application do not receives data stream from file

command = './grid < /home/felipe/Documents/proteins/grid.in'.split(' ')

p = subprocess.Popen(command,stdout=subprocess.PIPE)

Но он не работает, например, os.system (), который сделал то, что я хочу сделать с подпроцессом:

#works
command = './grid < /home/felipe/Documents/proteins/grid.in'.split(' ')

os.system(command)

Как я могу использовать сигнал потока данных '<' с модулем подпроцесса для получения ввода в приложение? </p>

1 Ответ

0 голосов
/ 21 января 2019

Если вы просто хотите использовать Python в качестве оболочки, вам нужно будет запустить ваш (суб) процесс с shell=True.Но так как вы уже используете Python, вы можете больше полагаться на Python и меньше на оболочку, вы можете сделать следующее:

with open('/home/felipe/Documents/proteins/grid.in') as in_file:
    p = subprocess.Popen('./grid', stdin=in_file)

Это откроет ваш входной файл как in_file и передаст его встандартный ввод ./grid, как при перенаправлении оболочки.

...