2015-10-19 212 views
2

我想调用一个子进程在python中使用subprocess.call(),'cwd'参数,以便这个特定的子进程在不同的目录中执行。我不想使用os.chdir(),因为对于稍后在程序中的将来进程,我想保留在运行程序的原始目录中。python,使用glob与cwd参数subprocess.call

但是,我也想在匹配一个glob模式的文件集上运行这个特定的子进程。因此,举例来说,我可能想要做

subprocess.call(['ls'] + glob('*.txt'), cwd="/my/other/dir/") 

但当然水珠命令不知道在看/我的/其它/目录,因此它失败。如何在不使用shell = True的情况下做到这一点?

+0

你想要列出'/ my/other/dir /'中的所有'.txt'文件吗?如果是这样,你不需要glob。 –

+0

不,这只是一个例子。我试图运行一个定制的脚本来处理在子目录中带有.PHY扩展名的所有文件。 – user2667066

回答

2

您也可以在glob模式中使用CWD。像glob.glob("/my/other/dir/*.txt")。它将随着完全匹配而扩大,如/my/other/dir/aa.txt。如果您不想将完整路径传递给可执行文件,请将其关闭。

CWD = "/my/other/dir/" 
files = map(lambda x: x[len(CWD):], glob.glob(CWD + "*.txt")) 
subprocess.call(['ls'] + files, cwd=CWD) 

或者您可以在子流程结束后更改目录。

+0

在没有任何其他建议的情况下,使用完整路径可能是前进的方向,尽管可能这会导致系统独立性问题。为了避免这种情况,我推测我可以在CDW中使用os.getcwd()的相对路径。这一切看起来都有些诡异,但我想它应该起作用,所以我会选择这个作为当下的答案。不过,我希望有更清晰的方式。 – user2667066

+0

此解决方案中没有任何内容需要绝对路径。没有必要预先安装'os.getcwd()'。 – jfs

相关问题