子进程中带有变量的命令行
Command line with variables in subprocess
我想 运行 此命令在脚本的子进程中使用变量。
变量为:
filenames[k]
filenames
有很多名字(字符串),我可以用 k
.
命令是:
python3 train.py "C:\Users\Tommy\data\"+filenames[k] "C:\Users\Tommy\data\"+filenames[k]+"_model" --choice A
我想运行脚本中的这个命令作为子进程:
subprocess.run([" python3 train.py "C:\Users\Tommy\data\"+filenames[k] "C:\Users\Tommy\data\"+filenames[k]+"_model" --choice A "])
但是语法有问题。我不知道是什么。
我 运行 这个 Python 3.6.8 在 Windows.
我认为你迷失了字符串连接...你必须通过 run
或类似的方式执行命令:作为字符串或作为列表(因为列表通常更具可读性!)
大小写:args
作为字符串
cmd = f'python3 train.py "C:\Users\Tommy\data\{filenames[k]}" "C:\Users\Tommy\data\{filenames[k]}+_model" --choice A'
subprocess.run(args=cmd, shell=True)
案例:args
作为列表
cmd = f'python3 train.py "C:\Users\Tommy\data\{filenames[k]}" "C:\Users\Tommy\data\{filenames[k]}+_model" --choice A'
cmd = cmd.split(' ') # provided that no white spaces in the paths!!
subprocess.run(args=cmd, shell=False)
备注:
“新”字符串连接非常方便 f"smt {variable} smt else"
其中变量是之前定义的变量
如果您希望您的程序从 shell 启动,那么您需要添加一个 kwrags 参数 shell=True
,默认为 False
。在这种情况下,根据您选择 args
是字符串还是列表,您应该更加小心:从文档“如果 shell 为真,建议传递 `args作为字符串而不是序列
查看docs,在Popen Constructor,获取签名的完整描述
我想 运行 此命令在脚本的子进程中使用变量。
变量为:
filenames[k]
filenames
有很多名字(字符串),我可以用 k
.
命令是:
python3 train.py "C:\Users\Tommy\data\"+filenames[k] "C:\Users\Tommy\data\"+filenames[k]+"_model" --choice A
我想运行脚本中的这个命令作为子进程:
subprocess.run([" python3 train.py "C:\Users\Tommy\data\"+filenames[k] "C:\Users\Tommy\data\"+filenames[k]+"_model" --choice A "])
但是语法有问题。我不知道是什么。 我 运行 这个 Python 3.6.8 在 Windows.
我认为你迷失了字符串连接...你必须通过 run
或类似的方式执行命令:作为字符串或作为列表(因为列表通常更具可读性!)
大小写:args
作为字符串
cmd = f'python3 train.py "C:\Users\Tommy\data\{filenames[k]}" "C:\Users\Tommy\data\{filenames[k]}+_model" --choice A'
subprocess.run(args=cmd, shell=True)
案例:args
作为列表
cmd = f'python3 train.py "C:\Users\Tommy\data\{filenames[k]}" "C:\Users\Tommy\data\{filenames[k]}+_model" --choice A'
cmd = cmd.split(' ') # provided that no white spaces in the paths!!
subprocess.run(args=cmd, shell=False)
备注:
“新”字符串连接非常方便
f"smt {variable} smt else"
其中变量是之前定义的变量如果您希望您的程序从 shell 启动,那么您需要添加一个 kwrags 参数
shell=True
,默认为False
。在这种情况下,根据您选择args
是字符串还是列表,您应该更加小心:从文档“如果 shell 为真,建议传递 `args作为字符串而不是序列查看docs,在Popen Constructor,获取签名的完整描述