Python:子进程不写输出文件

时间:2016-09-28 08:00:15

标签: python subprocess

使用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会产生非常不同的结果。

1 个答案:

答案 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()加入路径。

如果文件夹和文件不存在,您可以创建它们。但是没有什么可读的。如果你想写信给他们,可以像上面所示那样实现。