运行 来自 Python 的带有命令行参数的 C 可执行文件
Running a C executable from Python with command line arguments
我有一个 C 文件说,myfile.c
。
现在我正在编译:gcc myfile.c -o myfile
所以现在 运行 我需要做的是:./myfile inputFileName > outputFileName
其中 inputFileName
和 outputFileName
是 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)
我有一个 C 文件说,myfile.c
。
现在我正在编译:gcc myfile.c -o myfile
所以现在 运行 我需要做的是:./myfile inputFileName > outputFileName
其中 inputFileName
和 outputFileName
是 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)