【问题标题】:Running a C executable from Python with command line arguments使用命令行参数从 Python 运行 C 可执行文件
【发布时间】:2021-12-21 12:00:06
【问题描述】:

我有一个 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 command-line executable


【解决方案1】:

您在命令中使用的>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?

【讨论】:

    【解决方案2】:

    您可以在 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-27
      • 2018-11-04
      • 2017-08-30
      • 2020-09-13
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      相关资源
      最近更新 更多