使用命令行参数从 Python 运行 C 可执行文件
Posted
技术标签:
【中文标题】使用命令行参数从 Python 运行 C 可执行文件【英文标题】:Running a C executable from Python with command line arguments 【发布时间】:2021-12-29 14:22:01 【问题描述】:我有一个 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
是可执行文件的名称。
我该怎么办?
【问题讨论】:
您应该能够直接从 python 中将 C 文件作为模块运行。请提出look at this *** 问题,该问题可能会导致Python documentation。 作者是否可能在其子进程命令中缺少“>”?> outputFileName
是输出重定向。这是你的 shell 正在做的事情——它不是你的程序的参数。要使用 python 重现它,请查看 ***.com/questions/4965159/…
这能回答你的问题吗? How to make a call to an executable from Python script?
【参考方案1】:
您可以在 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)
【讨论】:
【参考方案2】:您在命令中使用的>
是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 运行 C 可执行文件的主要内容,如果未能解决你的问题,请参考以下文章