运行 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=
我做错了什么?
这有两个问题:
- 这不是您在 shell 中设置变量的方式。相反,语法是
THENAME=PETER
.
- 每个命令 运行 都在一个子进程中,这意味着它们不共享变量。没有很好的方法来“保存”最终在子流程中设置的变量。
您可以在同一子进程中修复语法和 运行 这两个命令:
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)
我正在尝试 运行 这个 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=
我做错了什么?
这有两个问题:
- 这不是您在 shell 中设置变量的方式。相反,语法是
THENAME=PETER
. - 每个命令 运行 都在一个子进程中,这意味着它们不共享变量。没有很好的方法来“保存”最终在子流程中设置的变量。
您可以在同一子进程中修复语法和 运行 这两个命令:
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)