【发布时间】:2012-03-27 16:24:04
【问题描述】:
我正在尝试从 python3 脚本执行 Unix 命令,如下所示:
mycommand `cmd_giving_a_path`/file
所以我正在使用 subprocess.Popen 函数。但是无论我尝试了什么,子进程都不会评估反引号之间的命令。 这是我尝试过的:
>>> subprocess.Popen(['echo', 'toto'])
<subprocess.Popen object at 0x2a98df1c50>
>>> toto
很好!
subprocess.Popen(['echo', 'toto', '`ls`'])
<subprocess.Popen object at 0x2a98df1d50>
>>> toto `ls`
也不错!
>>> subprocess.Popen(['echo', 'toto', '`ls`'], shell=True)
<subprocess.Popen object at 0x2a98df1d90>
我不明白这一点:我根本没有输出。 使用此命令,我希望生成一个 shell 并接收命令:
echo toto `ls`
但显然,我错了!
有人可以帮忙吗?
谢谢!
PS:对于那些可能会问“你为什么需要这个?”的人。答案是: 因为命令的选项是从可能包含这种语法的输入文件中读取的。
【问题讨论】:
-
输入文件中有什么else?
-
我不确定你的意思是什么?您是在谈论环境变量之类的东西吗?
-
我的意思是,如果输入文件 only 包含这些内容,那么您为什么要尝试从 python 中“解释”它,而不是仅仅将其作为 Bash 脚本或其他方式运行?
-
其实我正在尝试实现一个可配置的编译脚本。我需要为不同的工具和不同的选项集编译源代码。所以我有一个包含类似行的文件:
tool1 set1 : -options...根据用户选择的工具和选项,我提取相应的选项并将其提供给所选工具。文件列表存储在另一个也被解析的文件中。我可以使用 Makefile,但我不知道如何编写好的文件,我更喜欢 Python 命令行解析器。你觉得我的方法不好? -
已经有一个相当标准的 Python 编译脚本实用程序:SCons。
标签: python python-3.x subprocess