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 更有可能创建一个可以解释回的字符串原始对象。