使用命令行参数从 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

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 是可执行文件的名称。

我该怎么办?

【问题讨论】:

您应该能够直接从 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 可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

C程序获取命令行参数

Windows 没有将命令行参数传递给从 shell 执行的 Python 程序

如何在labview里面调用可执行文件.exe

Python 命令行参数以及代码编译发布为可执行文件

Python 命令行参数以及代码编译发布为可执行文件

怎样在一个 C 程序中调用另一个程序 (独立可执行的程序, 或系统命令)?