Python,使用 glob 和 subprocess.call 的 cwd 参数

问题描述 投票:0回答:2

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

但是,我还想在一组匹配 glob 模式的文件上运行这个特定的子进程。例如,我可能想做

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

但是 glob 命令当然不知道在 /my/other/dir 中查找,所以它失败了。在不使用 shell=True 的情况下如何做到这一点?

python subprocess glob
2个回答
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
投票

对于自 2021 年以来关注此问题的任何人,Python 3.10 中的

glob.glob
添加了此功能,请参阅发行说明此处

因此可以按如下方式完成:

my_other_dir = "/my/other/dir/"
subprocess.call(['ls'] + glob('*.txt', root_dir=my_other_dir), cwd=my_other_dir)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.