当前位置: 首页 > 面试题库 >

为什么子流程中的简单回显不起作用

司马钱明
2023-03-14
问题内容

我正在尝试使用子过程执行简单的回显操作:

import subprocess
import shlex

cmd = 'echo $HOME'
proc = subprocess.Popen(shlex.split(cmd), shell=True, stdout=subprocess.PIPE)
print proc.communicate()[0]

但是它什么也不打印。即使我将命令更改为echo "hello, world"它也不会打印任何内容。任何帮助表示赞赏。


问题答案:

在Unix上shell=True,第2个及以下参数表示外壳本身,请使用字符串将命令传递给外壳:

import subprocess

cmd = 'echo $HOME'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
print proc.communicate()[0],

您也可以将其编写为:

import subprocess

cmd = 'echo $HOME'
print subprocess.check_output(cmd, shell=True),

从子流程的文档:

在带有shell=True的Unix上,shell默认为/ bin /
sh。如果args是字符串,则该字符串指定要通过外壳执行的命令。这意味着字符串的格式必须与在shell提示符下键入时的格式完全相同。例如,这包括在文件名中使用引号或反斜杠转义。
如果args是序列,则第一项指定命令字符串,任何其他项将被视为shell本身的其他参数 。也就是说,Popen等效于:

Popen(['/bin/sh', '-c', args[0], args[1], ...])


 类似资料:
  • 问题内容: 为什么这个独立的代码不起作用: 即使变量中包含https,每次也可以打印。 问题答案: 如有疑问,请阅读文档: [strpos]返回大海捞针中第一次出现针的数字位置。 因此,您想尝试更多类似的方法: 因为否则返回一个数字,并且您正在寻找布尔值。

  • 我有一个Spring Boot应用程序,我试图在其中测试使用LiquiBase的一些迁移。我试着看看回滚函数是如何工作的,但我不断地得到错误。 当我运行应用程序时,表创建正确...但我不知道如何或在哪里运行命令来执行回滚。我尝试在IntelliJ中的Maven Goal中运行以下命令: 当我运行时,它会说: 如果数据库URL丢失或错误,那么我认为它也不能创建表?

  • 问题内容: 我在看这个问题。 就我而言,我想做一个: 现在,我可以在命令行中检查“ ls文件夹/*.txt”的工作原理,因为该文件夹包含许多.txt文件。 但是在Python(2.6)中,我得到了: ls:无法访问*:没有此类文件或目录 我尝试做: 和其他变体,但似乎根本不喜欢角色。 还有其他逃生方法吗? 问题答案: 被您的外壳自动展开。如果您引用,则不起作用: 如果要获取与模式匹配的文件,请使用

  • 问题内容: 很简单的一行: 失败与: 而扩展为: 工作良好。 问题答案: 您使用错误。使用这种方式: 通用形式为:

  • 我对这段代码有一个问题,因为我似乎找不到问题所在?这是我试图解决的问题:-声明并编写一个名为valid_triangle的函数,它将表示三角形三边长度的三个实数作为参数,并根据这三个长度是否能够构成三角形输出真或假。 关于三角形的以下规则: 三角形只能有正长度的边 三角形任意两条边的长度之和必须大于第三条边的长度

  • 我有组织。postgresql。util。PSQLException:错误:关系“roles”不存在,我不知道为什么。 实体类 资源/META-INF/持久性。xml 在我有 那么为什么我有这样的错误,为什么会这样?我读过这个问题,它对我没有帮助。