我希望在 python 脚本的子目录中运行 bash 脚本。这个 bash 脚本应该执行它的所有操作,就好像它在它的当前目录中一样。除了将目录作为参数传递并使用它来指导所有调用之外,还有什么方法可以做到这一点?
基本上,类似于
for i in range(1,100):
subprocess.call(['/some%s/task.sh' % i, arg1])
脚本的内容与该 some%s 目录中的文件一起使用。
我希望在 python 脚本的子目录中运行 bash 脚本。这个 bash 脚本应该执行它的所有操作,就好像它在它的当前目录中一样。除了将目录作为参数传递并使用它来指导所有调用之外,还有什么方法可以做到这一点?
基本上,类似于
for i in range(1,100):
subprocess.call(['/some%s/task.sh' % i, arg1])
脚本的内容与该 some%s 目录中的文件一起使用。
subprocess.call
有这个cwd
关键字参数:
for i in xrange(1, 100):
subprocess.call(["./task.sh", arg1], cwd=("/some%d" % i))
(仅隐含地记录了这一点:“完整的函数签名与构造函数的签名相同Popen
- 此函数将所有提供的参数直接传递到该接口。”cwd
列于Popen
。)
是的,
就在您的循环以编程方式保存当前工作目录并在 subprocess.call 之前将当前工作目录更改为 /some%s 之前,然后在完成后将其设置回原始值。
import os
Orig = os.path.abspath('.')
for i in range(1,100):
os.chdir('/some%s' % i)
subprocess.call(['./task.sh' % i, arg1])
os.chdir(Orig)