运行 来自 Python 的带有命令行参数的 C 可执行文件

Running a C executable from Python with command line arguments

我有一个 C 文件说,myfile.c

现在我正在编译:gcc myfile.c -o myfile

所以现在 运行 我需要做的是:./myfile inputFileName > outputFileName

其中 inputFileNameoutputFileName 是 2 个命令行输入。

现在我正尝试在 python 程序中执行此操作,我正在尝试以下方法但它无法正常工作可能是由于 >

import subprocess
import sys

inputFileName = sys.argv[1];
outputFileName = sys.argv[2];

subprocess.run(['/home/dev/Desktop/myfile', inputFileName, outputFileName])

其中 /home/dev/Desktop 是我的目录名称,myfile 是可执行文件的名称。

我该怎么办?

您在命令中使用的 >output redirection 的 shell 特定语法。如果你想通过 Python 做同样的事情,你将不得不调用 shell 来为你做这件事,使用 shell=True 和一个命令行(不是列表)。

像这样:

subprocess.run(f'/home/dev/Desktop/myfile "{inputFileName}" > "{outputFileName}"', shell=True)

如果您只想通过 Python 执行此操作而不调用 shell(这是 shell=True 所做的),请查看其他问答:How to redirect output with subprocess in Python?

您可以在 Python 中打开输出文件,并将文件对象传递给 subprocess.run()

import subprocess
import sys

inputFileName = sys.argv[1];
outputFileName = sys.argv[2];

with open(outputFileName, "w") as out:
    subprocess.run(['/home/dev/Desktop/myfile', inputFileName], stdout=out)