【发布时间】: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()是旧的,难以正确使用,已被thesubprocessmodule 取代。此外,您使用了太多引号 - 不要将文字引号放在句法引号内,除非这样做会导致您可以实际上将命令传递给包含这些文字引号的 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