【问题标题】:How to make an exe command run from inside Python? [duplicate]如何从 Python 内部运行 exe 命令? [复制]
【发布时间】:2018-01-08 23:22:57
【问题描述】:

我有一个这样的命令,它会产生一些计算并将一些输出存储在一个文件夹中。所以,我有这个适用于 bash 命令的命令(在 Ubuntu 中)。

/home/usr2/AXE/prog1.exe -k 1 -m /home/usr2/AXE/config.txt

但是,我想从 python 程序中“调用”它。

最终的想法是在python中生成大量这种性质的串行进程。

/home/usr2/AXE/prog1.exe -k 1 -m /home/usr2/AXE/config.txt
/home/usr2/AXE/prog1.exe -k 2 -m /home/usr2/AXE/config.txt
/home/usr2/AXE/prog1.exe -k 3 -m /home/usr2/AXE/config.txt
...
...
/home/usr2/AXE/prog1.exe -k 2000 -m /home/usr2/AXE/config.txt

到目前为止

import os
os.system('"/home/usr2/AXE/prog1.exe -k 1 -m /home/usr2/AXE/config.txt"')

这给了我Out[11]: 32512 的命令行输出,但输出文件没有在必要的文件夹中生成。

我做错了什么?

附:对 Bash 编程一无所知。但也会对 Bash 解决方案感兴趣。

【问题讨论】:

  • os.system() 是旧的,难以正确使用,已被the subprocess module 取代。此外,您使用了太多引号 - 不要将文字引号放在句法引号内,除非这样做会导致您可以实际上将命令传递给包含这些文字引号的 shell。跨度>
  • 也就是说,这里的 bash 答案更短:for ((i=1; i<=2000; i++)); do /home/usr2/AXE/prog1.exe -k "$i" -m /home/usr2/AXE/config.txt; done
  • 谢谢!我正在关注这个答案。 stackoverflow.com/questions/13222808/…我试试看
  • 该答案的内引号围绕可执行文件,而不是整个命令。 (只是在那个例子中,可执行文件 是 整个命令)。例如,如果您传递带有空格的参数,这是正确的做法,但如果您希望空格将命令与其参数或两个参数分开,则不是正确的做法。
  • @maximusdooku 如果在其他地方得到回答,请删除您的问题。正如您所报告的,这个问题只是一个语法(引用)错误。除此之外,我推荐使用 CharlesDuffy 给你的 bash 脚本。

标签: python bash shell operating-system


【解决方案1】:

直接的问题似乎是引号过多。 os.system 接受一个包含您要执行的命令的字符串。因此,要执行 shell 命令 echo hello,您需要从 Python 调用 os.system('echo hello')。调用os.system('"echo hello"')尝试执行shell命令"echo hello";换句话说,它会在您的PATH 中查找名为echo hello 的单个可执行文件,该文件可能不存在,当然也不是您想要的。所以摆脱一组引号。任何一个都可以,因为 Python 对待单引号和双引号是一样的。

您也可以尝试将您对os.system 的使用替换为subprocess.run,同样来自标准库。您传递的不是包含命令的单个字符串,而是传递一系列字符串,每个字符串都是您要运行的 shell 命令的一个标记。所以在我们的例子中你可以做subprocess.run(('echo', 'hello'))。 os.system 函数或多或少被弃用,取而代之的是 subprocess.run。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多