使用子进程时如何将两个以上的 string/variables 传递给我的 child 脚本?

How to pass more than two string/variables to my child script when using subprocess?

[1] 我可以将整数甚至列表传递给我的 child 脚本 (test.py) 吗?我该怎么做?

[2] 如果我还想将年龄变量传递给 child 脚本 (test.py) 并打印年龄,我应该如何修改我的代码?还有什么更好的方法可以将字符串粘在 parent 脚本中并在 child 脚本中将其分开?子进程本身可以传递超过 1 个字符串或变量吗?

Parent

#main.py
import subprocess
import sys

name = 'trump'  
age = 80
proc = subprocess.Popen([sys.executable, "test.py", "trump"])

Child

#test.py
import sys
name = sys.argv[1]

print(name)
#print(age)

阅读 subprocesssys.argv 的文档;一个接受参数序列,另一个提供接收到的参数的 list(减去 Python 的路径,如果它是 运行 作为 python scriptname.py)。它们必须是字符串,所以你不能按原样传递 age,但是:

proc = subprocess.Popen([sys.executable, "test.py", name, str(age)])

会努力通过它们,并且:

name = sys.argv[1]
age = int(sys.argv[2])

足以接收它们。就个人而言,我建议避免原始 sys.argv 解析,转而使用 argparse,使其成为:

# test.py
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('name', help='The name of the person')
parser.add_argument('age', type=int, help='The age of the person')
args = parser.parse_args()

print(args.name)
print(args.age)

之类的,因为学习 argparse 并可靠地使用它是有帮助的(重要的是,当你忘记程序将什么作为参数时,你可以 运行 programname.py --helpargparse会告诉你的)。