我目前正在编写一个python脚本,它将自动生成我项目中各种目录中的文件。目录结构如下:
Repository
|
|
_____ |_____
| |
Builds src
| |
__|__ __|__
Scripts xyz abc 3rdpartytools
| |
conf boost
| |
script1.py b2
script1.py是我的python文件,我想要执行的所有make文件都存在于3rdpartytools目录下。 boost目录只是一个例子。现在,我想执行文件b2
。从shell开始,。/ b2可以工作。
我尝试使用python文件中的subprocess.call。我试过了
call(["cd"," ../../../src/3rdpartytools/boost;./b2"])
但我得到/usr/bin/cd: line 2: cd: ../../../src/3rdpartytools/boost/b2: No such file or directory
从shell执行时的命令相同,工作正常。
Python 2.7和CentOS。
答案 0 :(得分:2)
您以多种方式错误地使用subprocess.call
。 subprocess.call
实际上不会调用shell,除非您特别要求它。因此,符号;
具有无特殊含义。由于它与路径位于同一个字符串中,因此您尝试cd
进入../../../src/3rdpartytools/boost;./b"
,不执行cd然后执行该功能。
使用os.chdir转到相应的目录,然后使用./b2
致电subprocess.call(["./b2"])
。