python(Windows)中的多个shell命令

2024-09-25 10:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一台windows机器上工作,我想在shell中设置一个变量,并想将它与另一个shell命令一起使用,比如:

set variable = abc
echo %variable%

我知道我可以使用os.system(com1 && com2)来实现这一点,但我也知道,这被认为是“坏样式”,使用subprocess模块应该是可能的,但是我不知道怎么做。 以下是我目前所得到的:

^{pr2}$

但这两行似乎都不起作用,两个命令都不能执行。另外,如果我输入不存在的命令,我不会得到错误。正确的方法是什么?在


Tags: 模块命令echo机器oswindows样式shell
1条回答
网友
1楼 · 发布于 2024-09-25 10:30:37

Popen只能执行一个命令或shell脚本。您只需使用;将整个shell脚本作为单个参数提供来分隔不同的命令:

proc = Popen('set variable=abc;echo %variable%', shell=True)

也可以使用多行:

^{pr2}$

最后一个0是进程的返回代码

communicate方法用于写入进程的stdin。在您的例子中,进程在运行set variable之后立即结束,因此对communicate的调用实际上没有做任何事情。在

您可以生成一个shell,然后使用communicate来编写命令:

>>> proc = Popen(['sh'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
>>> proc.communicate('echo 1; echo 2\n')
('1\n2\n', '')

请注意,communicate完成后也会关闭流,因此不能多次调用它。如果您想要一个交互式会话,您需要直接写入proc.stdin,并从{}读取。在


顺便说一句:您可以为Popen指定一个env参数,这样根据具体情况,您可能希望这样做:

proc = Popen(['echo', '%variable%'], env={'variable': 'abc'})

显然,这将使用echo可执行文件,而不是shell内置的,但它避免使用shell=True。在

相关问题 更多 >