2013-06-28 212 views
2

我期待在python脚本的子目录中运行bash脚本。这个bash脚本应该像执行当前目录一样执行所有的操作。除了将目录作为参数传递并使用它来指挥所有呼叫之外,是否有任何方法可以做到这一点?从脚本当前目录中运行Python中的子进程bash脚本

基本上沿着

for i in range(1,100): 
    subprocess.call(['/some%s/task.sh' % i, arg1]) 

线的东西在脚本的工作与某些%s的目录内的文件的内容。

回答

2

subprocess.call有这个cwd关键字参数:

for i in xrange(1, 100): 
    subprocess.call(["./task.sh", arg1], cwd=("/some%d" % i)) 

(这被证明只是含蓄:“完整的函数签名相同的Popen构造 - 这个功能通过所有提供“cwd列出在Popen。)

+0

OP的问题包括:“除了传递目录作为参数并使用它来指挥所有呼叫之外,是否有任何方法可以做到这一点”您的答案完全是他们不想做的! –

+0

@SteveBarnes:我读到的意思是“脚本的一个参数”。这是在Python中使用它的正确方法。 –

+0

+1:这是正确的做法。 – jfs

0

没错,

就在你的循环programitically保存当前工作目录和subprocess.call之前改变当前的工作目录为/某些%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) 
+0

为了可靠性,您应该添加一些try:除了control之外,以确保dir ectory和脚本都存在。 –

+1

从'chdir()'中移除'test.sh',否则调用失败。 –

+0

这是不可靠的;一个例外将永久改变目录。这也是不必要的复杂。 –