私はPythonでサブプロセスとして開始するプログラム(MolPro)にファイルを渡そうとしています。サブプロセスへのファイル引数としてのPython文字列
これは、最も一般的に、コンソールに次のように、引数としてファイルを取ります。
path/molpro filename.ext
filename.exは、実行するコードを含む場合。代わりにbashスクリプト(私がやろうとしているが、Pythonでよ何):
#!/usr/bin/env bash
path/molpro << EOF
# MolPro code
EOF
私はPythonで上記をやろうとしています。だから私は、入力ファイルのように十分に見ていませんが、それでもPython - How do I pass a string into subprocess.Popen (using the stdin argument)?を見て、私はImが間違っているものを見つけることができないかなり確信している
from subprocess import Popen, STDOUT, PIPE
DEVNULL = open('/dev/null', 'w') # I'm using Python 2 so I can't use subprocess.DEVNULL
StdinCommand = '''
MolPro code
'''
# Method 1 (stdout will be a file)
Popen(['path/molpro', StdinCommand], shell = False, stdout = None, stderr = STDOUT, stdin = DEVNULL)
# ERROR: more than 1 input file not allowed
# Method 2
p = Popen(['path/molpro', StdinCommand], shell = False, stdout = None, stderr = STDOUT, stdin = PIPE)
p.communicate(input = StdinCommand)
# ERROR: more than 1 input file not allowed
:私はこれを試してみました。
は私はないに好む:
- がTrue
- (そして、私はMolProコードを変更することはできません)
おかげへ
更新:誰かが同じことをしようとしている場合は、どちらの方法でも何も返されないため、仕事が終了するのを待たずにいる場合は、p.stdin.write(StdinCommand)
を代わりに使用してください。
は、なぜあなたは、テキストの大規模なブロックを、提供しようとしている 'StdinCommand'実際のコマンドラインで?方法2はstdinのテキストを提供します。なぜあなたはコマンドラインでそれを繰り返すのですか? –
間違いで1時間ほど見落としてしまいました。:-) – Mark