我试过了
import subprocess
p = subprocess.Popen("ls -la /etc", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.stdout.read().decode()
这让我
FileNotFoundError: [Errno 2] No such file or directory: 'ls -la /etc': 'ls -la /etc'
跟随
Python subprocess.Popen with var/args
是的
import subprocess
p = subprocess.Popen(["ls", "-la", "/etc"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.stdout.read().decode()
确实有用。你知道吗
为什么?为什么我要把我的命令和它的论点分开?这种设计的基本原理是什么?你知道吗
Python版本:
3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0]
根据docs,它取决于
shell=
关键字参数关于字符串与列表的工作方式(粗体表示可能导致您的行为的原因):再往下。。。你知道吗
这就是所有进程调用在UNIX上的工作方式。
通常,在UNIX上运行程序需要执行以下步骤:
因此,
subprocess.Popen
公开了数组接口,因为数组接口是操作系统在引擎盖下实际执行的操作。你知道吗当您在shell上运行
ls /tmp
时,该shell会将字符串转换为一个数组,然后自己执行上面的步骤,但它会为您提供更多的控制(如果有人创建名为/tmp/$(rm -rf ~)
的文件,您不希望尝试cat /tmp/$(rm -rf ~)
删除主目录),而您自己执行转换时,它会避免出现严重的错误。你知道吗相关问题 更多 >
编程相关推荐