使用Python subprocess.call
,我试图调用一个读取磁盘上输入文件的C程序,并创建多个输出文件。从终端运行C程序会产生预期的结果,但subprocess.call
没有。
在最小示例中,程序应读取暂存文件夹中的输入文件,并在同一文件夹中创建输出文件。输入和输入的位置和名称;输出文件被硬编码到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。这是意料之外的,并且从终端调用exe会产生非常不同的结果。
答案 0 :(得分:1)
import os
subprocess.call('bin/program.exe') # parses input file 'scratch/input.txt'
if not os.path.isfile('scratch'):
os.mkdir('scratch')
with open(os.path.join('scratch','output.txt'), 'w') as f:
f.write('Your message')
您必须以某种模式打开文件。阅读例如。您需要使用os.path.join()加入路径。
如果文件夹和文件不存在,您可以创建它们。但是没有什么可读的。如果你想写信给他们,可以像上面所示那样实现。