Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何执行复杂的;查找“;python中的linux shell命令_Python_Linux - Fatal编程技术网

我如何执行复杂的;查找“;python中的linux shell命令

我如何执行复杂的;查找“;python中的linux shell命令,python,linux,Python,Linux,我需要执行以下命令: find PATH -type f -exec du -h --all {} + 以下是我的尝试: import subprocess result = subprocess.Popen(["find", PATH, "-type", "f", "-exec", "du", "-h", "--all", "{}", "+"], shell=True, stdout=subprocess.PIPE).communicate()[0] print(result) 结果我得

我需要执行以下命令:

find PATH -type f -exec du -h --all {} +
以下是我的尝试:

import subprocess

result = subprocess.Popen(["find", PATH, "-type", "f", "-exec", "du", "-h", "--all", "{}", "+"], shell=True, stdout=subprocess.PIPE).communicate()[0]
print(result)

结果我得到了一些垃圾。我做错了什么?

只有当
Popen()
的第一个参数是一个应由shell解析的字符串时,才应该使用
shell=True
。如果它是一个数组,那么您已经完成了必要的解析,并且不应该使用
shell=True

Popen()
的第一个参数是应由shell解析的字符串时,您应该只使用
shell=True
。如果它是一个数组,您已经完成了必要的解析,不应该使用
shell=True

您不需要
shell=True
您得到的是什么垃圾?@Barmar脚本应该列出某个目录中的所有文件。但它列出了一些不应该列出的文件。但是我听从了你的建议,删除了
shell=True
,现在它可以正常工作了!你不需要
shell=True
你得到了什么垃圾?@Barmar这个脚本应该列出某个目录中的所有文件。但它列出了一些不应该列出的文件。但是我听从了你的建议,删除了
shell=True
,现在它可以正常工作了!感谢您提供这段代码片段,它可能会提供一些即时帮助。一个恰当的解释将通过说明为什么这是一个很好的解决问题的方法来体现它的教育价值,并将使它对未来有类似但不完全相同问题的读者更有用。请编辑您的答案以添加解释,并说明适用的限制和假设。commands模块是在os.open()上构建的,它将系统命令作为普通字符串,并返回一个元组,其中包含由命令生成的任何输出以及退出状态(可选)。元组中的第一项始终是运行的命令的状态代码,索引1处的项始终是命令生成的输出。但是,如果您使用的是Python2.6或3.x以上版本,则此模块无法正常工作。更多详细信息请参阅此代码片段,它可能会提供一些即时帮助。一个恰当的解释将通过说明为什么这是一个很好的解决问题的方法来体现它的教育价值,并将使它对未来有类似但不完全相同问题的读者更有用。请编辑您的答案以添加解释,并说明适用的限制和假设。commands模块是在os.open()上构建的,它将系统命令作为普通字符串,并返回一个元组,其中包含由命令生成的任何输出以及退出状态(可选)。元组中的第一项始终是运行的命令的状态代码,索引1处的项始终是命令生成的输出。但是,如果您使用的是Python2.6或3.x以上版本,那么这个模块就无法提供更多细节
import commands

commands = r'''find PATH -type f -exec du -h --all {} +'''
result = commands.getstatusoutput(command)[0]
print("{}".format(result))