Pythonのsubprocess.call
を使用して、ディスク上の入力ファイルを読み込んで複数の出力ファイルを作成するCプログラムを呼び出そうとしています。 subprocess.call
ではありませんが、ターミナルからCプログラムを実行すると期待される結果が得られます。Python:サブプロセスが出力ファイルを書き込まない
最小限の例では、プログラムはスクラッチフォルダ内の入力ファイルを読み込み、同じフォルダに出力ファイルを作成する必要があります。入力ファイル&の場所と名前は、Cプログラムにハードコードされています。
import subprocess
subprocess.call('bin/program.exe') # parses input file 'scratch/input.txt'
with open('scratch/output.txt') as f:
print(f.read())
これが返されます:私は間違って何をやっている
FileNotFoundError: [Errno 2] No such file or directory: 'scratch/output.txt'
?
subprocess.check_output
を使用すると、エラーは発生しません。
編集: サブプロセスの作業ディレクトリが含まれていることがわかります。 Cの実行ファイルには、exe(すなわち、 '../scratch/input.txt')に対する入力/出力用のハードコーディングされたパスがありますが、subprocess.call()
呼び出しには、pythonスクリプトに関連するパスが必要です。これは予期せぬことであり、端末からexeを呼び出すと非常に異なる結果を生み出します。
「インポートコマンド」を使用することをお勧めします。これを使用すると、Cプログラムの出力も得られます(gccで実行する通常の方法で実行できます)。失敗した場合は、ステータスコードが変更されます。例えば、 。 output = commands.getstatusoutput( "gcc test.c") – abhijeetmote
@abhijeetmote 'commands'モジュールは' subprocess'モジュールで廃止されました。 – Valarauko