【问题标题】:Subprocess unable to parse semicolon after do statement?子进程在do语句后无法解析分号?
【发布时间】:2017-03-23 01:47:21
【问题描述】:

尝试运行以下命令:

command = "for i in `/bin/generateItems` ; do ; echo $i ; /bin/somecommand $i; done"
p = subprocess(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()

我收到以下错误: 没有这样的文件或目录

但是,当我在删除分号后运行完全相同的代码时,它可以工作:

command = "for i in `/bin/generateItems` ; do ; echo $i ; /bin/somecommand $i; done"
p = subprocess(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()

有人可以解释为什么会这样吗?我可以做些什么来让命令在 do 之后使用分号?

【问题讨论】:

  • 这与 Python 无关。如果你直接在 shell 中运行命令,你会得到同样的错误,不是吗?这是一个 shell 语法错误。
  • 您可以尝试在命令周围使用方括号 ["for i in /bin/generateItems ; do ; echo $i ; /bin/somecommand $i; done"]
  • 你为什么需要那个分号?
  • 这两个代码块之间应该有区别吗?您在哪里删除了分号?
  • 我得到一个不同的错误,顺便说一句:bash: syntax error near unexpected token `;`

标签: python python-2.7 subprocess


【解决方案1】:

在 bash 中无效do 和块中的第一个命令之间有一个换行符以外的命令分隔符。

【讨论】:

  • 请注意我使用的是 Korn shell。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多