使用子进程时如何将两个以上的 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)
阅读 subprocess
和 sys.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 --help
和 argparse
会告诉你的)。
[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)
阅读 subprocess
和 sys.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 --help
和 argparse
会告诉你的)。