运行 shell 脚本回显在 Python 中出现问题

Problem with running shell script echo in Python

我正在尝试 运行 这个 shell 脚本 Python:

set THENAME = PETER
echo THENAME = $THENAME

所以在 Python3 我这样做:

import subprocess

shell_command = "set THENAME = PETER"
subprocess.check_call(shell_command, shell=True)
shell_command = "echo THENAME =$THENAME"
subprocess.check_call(shell_command, shell=True)

所以我希望当我 运行 Linux 或 Unix 上的 python 代码时,我得到:

THENAME=PETER

但我得到的是:

THENAME=

我做错了什么?

这有两个问题:

  1. 这不是您在 shell 中设置变量的方式。相反,语法是 THENAME=PETER.
  2. 每个命令 运行 都在一个子进程中,这意味着它们不共享变量。没有很好的方法来“保存”最终在子流程中设置的变量。

您可以在同一子进程中修复语法和 运行 这两个命令:

import subprocess
shell_command = "THENAME=PETER; echo THENAME =$THENAME"
subprocess.check_call(shell_command, shell=True)

或者在命令的环境中传入变量:

import os
import subprocess
shell_command = "echo THENAME =$THENAME"
subprocess.check_call(shell_command, shell=True, env=dict(os.environ, THENAME="PETER"))

或在您的 Python 流程中设置它,以便所有未来的子流程都将继承它:

import os
import subprocess
shell_command = "echo THENAME =$THENAME"
os.environ["THENAME"]="PETER"
subprocess.check_call(shell_command, shell=True)