Subprocess.run变量记忆
Subprocess.run memory of variables
假设我们有以下内容:
import subprocess
import sys
a = 6
result = subprocess.run([sys.executable, "-c", "a*2"])
为什么说a
未定义? subprocess
模块是否记得先前的变量?
subprocess
创建了一个新的 python 进程,就好像您打开了一个新终端并在那里 运行 python
一样。新进程不共享任何内存,当然也无权访问当前进程的全局变量字典
可以直接在字符串中扩展a
的值:
subprocess.run([sys.executable, "-c", f"print({a} * 2)"])
或者,您可以通过在单独的语句中设置来传入 a
的值:
subprocess.run([sys.executable, "-c", f"a = {a}; a * 2"])
在所有情况下,如果要查看控制台输出,则需要打印结果。
如果您想使用数字以外的东西,请优先使用 {a!r}
而不是 {a}
,因为 repr
更有可能创建一个可以解释回的字符串原始对象。
假设我们有以下内容:
import subprocess
import sys
a = 6
result = subprocess.run([sys.executable, "-c", "a*2"])
为什么说a
未定义? subprocess
模块是否记得先前的变量?
subprocess
创建了一个新的 python 进程,就好像您打开了一个新终端并在那里 运行 python
一样。新进程不共享任何内存,当然也无权访问当前进程的全局变量字典
可以直接在字符串中扩展a
的值:
subprocess.run([sys.executable, "-c", f"print({a} * 2)"])
或者,您可以通过在单独的语句中设置来传入 a
的值:
subprocess.run([sys.executable, "-c", f"a = {a}; a * 2"])
在所有情况下,如果要查看控制台输出,则需要打印结果。
如果您想使用数字以外的东西,请优先使用 {a!r}
而不是 {a}
,因为 repr
更有可能创建一个可以解释回的字符串原始对象。