gpt4 book ai didi

python - 子进程无法使用复杂的 Unix 命令

转载 作者:行者123 更新时间:2023-12-01 03:45:01 26 4
gpt4 key购买 nike

我正在尝试在 Python 中运行 join 命令,但我被 subprocess 挫败。我迭代地组合了数千个大文件,因此字典需要大量内存。我的理由是 join 一次只需处理两个文件,因此我的内存开销会更低。

我尝试了许多不同的版本,试图让 subprocess 运行。谁能解释为什么这不起作用?当我打印 cmd 并在 shell 上自己执行它时,它运行得很好。

cmd = "join <(sort %s) <(sort %s)" % (outfile, filename) 
with open(out_temp, 'w') as out:
return_code = subprocess.call(cmd, stdout=out, shell=True)
if return_code != 0:
print "not working!"
break

产生的错误如下所示。但是,当我有 python print cmd 并在 shell 上自己执行它时,它运行得很好。

/bin/sh: -c: line 0: syntax error near unexpected token `('

我也尝试过将命令转换为列表,但我不确定如何分解命令的基本原理是什么。谁能解释一下吗? outfilefilename 是变量

["join" , "<(sort" , outfile , ") <(sort" , filename , ")"]

如有任何帮助,我们将不胜感激!我在 Python 中执行此操作是因为我要大量解析上游文件名以找出要组合的文件。

最佳答案

<(bash标准 shell 语法的扩展。请注意错误消息中它正在运行 /bin/sh ,不是/bin/bash ;即使/bin/sh/bin/bash 的链接, bash使用该链接运行时会删除许多扩展。

您可以使用bash明确地:

cmd = "bash -c 'join <(sort %s) <(sort %s)'" % (outfile, filename) 

关于python - 子进程无法使用复杂的 Unix 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39060644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com