我期待在python脚本的子目录中运行bash脚本。这个bash脚本应该像执行当前目录一样执行所有的操作。除了将目录作为参数传递并使用它来指挥所有呼叫之外,是否有任何方法可以做到这一点?从脚本当前目录中运行Python中的子进程bash脚本
基本上沿着
for i in range(1,100):
subprocess.call(['/some%s/task.sh' % i, arg1])
线的东西在脚本的工作与某些%s的目录内的文件的内容。
我期待在python脚本的子目录中运行bash脚本。这个bash脚本应该像执行当前目录一样执行所有的操作。除了将目录作为参数传递并使用它来指挥所有呼叫之外,是否有任何方法可以做到这一点?从脚本当前目录中运行Python中的子进程bash脚本
基本上沿着
for i in range(1,100):
subprocess.call(['/some%s/task.sh' % i, arg1])
线的东西在脚本的工作与某些%s的目录内的文件的内容。
subprocess.call
有这个cwd
关键字参数:
for i in xrange(1, 100):
subprocess.call(["./task.sh", arg1], cwd=("/some%d" % i))
(这被证明只是含蓄:“完整的函数签名相同的Popen
构造 - 这个功能通过所有提供“cwd
列出在Popen
。)
没错,
就在你的循环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)
为了可靠性,您应该添加一些try:除了control之外,以确保dir ectory和脚本都存在。 –
从'chdir()'中移除'test.sh',否则调用失败。 –
这是不可靠的;一个例外将永久改变目录。这也是不必要的复杂。 –
OP的问题包括:“除了传递目录作为参数并使用它来指挥所有呼叫之外,是否有任何方法可以做到这一点”您的答案完全是他们不想做的! –
@SteveBarnes:我读到的意思是“脚本的一个参数”。这是在Python中使用它的正确方法。 –
+1:这是正确的做法。 – jfs