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

Python, using glob with cwd argument to subprocess.call

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

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

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

但是 glob 命令当然不知道要查找 /my/other/dir,所以它失败了。如果不使用 shell=True 怎么办?

您也可以在 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)

或者您可以在子进程完成后将目录改回来。