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

标签 python unix subprocess

我正在尝试在 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/

相关文章:

python - 根据其他列的 groupby 为列设置值

regex - Unix/Linux 在多个文件中查找和替换函数调用

python - 在python3中执行终端命令

python - 查询中的 Django 问题

python - axvline 和 axhline 在多个子图的循环中

unix - 在没有 sudo 的情况下安装 numpy

unix - 在 tar z 不可用的 AIX 上,如何将目录压缩到归档文件中?

python - 使用子进程 popen 运行列表命令字符串并获取输出

python - 写入标准输入并正确打印结果

python - 创建可旋转的 3D 地球