【发布时间】:2018-08-22 14:43:10
【问题描述】:
我正在使用 Windows 机器,我想在 shell 中设置一个变量,并希望将它与另一个 shell 命令一起使用,例如:
set variable = abc
echo %variable%
我知道我可以使用os.system(com1 && com2) 来做到这一点,但我也知道,这被认为是“糟糕的风格”,应该可以通过使用 subprocess 模块来实现,但我不明白怎么做。
这是我到目前为止得到的:
proc = Popen('set variable=abc', shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
proc.communicate(input=b'echo %variable%)
但是这两行似乎都不起作用,两个命令都没有执行。此外,如果我输入不存在的命令,我不会收到错误消息。正确的做法是怎样的?
【问题讨论】:
-
Popen启动的 shell 不等待其标准输入;set命令运行,然后 shell 退出而不尝试从标准输入中读取任何内容。在这种情况下,您的命令(从 Python 脚本的角度来看)是一个单独的 shell 脚本,恰好由两个 shell 命令组成,而不是一对 shell 命令。 -
我强烈建议在标题和标签中更明确地说明 Windows。在 UNIX 上你会得到一个非常不同的答案。
-
...不过,一般来说,您所依赖的东西(设置和扩展 shell 变量)依赖于拥有一个 shell,所以在 UNIX 世界中,最佳做法是将您正在做的事情完全重新设计,使其完全不依赖于 shell 变量。
标签: python windows python-3.x subprocess popen