在 python 脚本中将多行传递给程序
Passing multiple lines to a program within a python script
我必须 运行 多个文件夹中的程序,因此想在 python 脚本中执行此操作,而不是必须从终端手动执行它。该程序采用多行参数,并通过以下方式从终端调用:
cad arguments1 <<EOF
> arguments2
> arguments3
> END
> EOF
我试着用
来做到这一点
subprocess.Popen(["cad arguments1 <<EOF\n","arguments2\n","arguments3\n","END\n","EOF], shell = True)
及其不同的变体,例如将所有参数放入一个字符串和 运行ning
subprocess.Popen(["cad", string], shell = True)
尝试不换行,运行将每一行作为一个新行 subprocess.Popen 等。程序被正确调用,但新行上的参数(arguments2、arguments3、END 和 EOF 未发送正确地连接到程序,因此程序失败。
当您使用 shell=True
时,您必须以单个字符串而不是列表的形式提供命令。
subprocess.Popen("""cad arguments1 <<EOF
arguments2
arguments3
END
EOF""", shell = True)
但是您可以通过管道将输入从 Python.
传送到流程,而不是使用 here-doc
proc = subprocess.Popen(["cad", "arguments1"], stdin=subprocess.PIPE, text=True)
proc.communicate("""arguments2
arguments3
END""")
我必须 运行 多个文件夹中的程序,因此想在 python 脚本中执行此操作,而不是必须从终端手动执行它。该程序采用多行参数,并通过以下方式从终端调用:
cad arguments1 <<EOF
> arguments2
> arguments3
> END
> EOF
我试着用
来做到这一点subprocess.Popen(["cad arguments1 <<EOF\n","arguments2\n","arguments3\n","END\n","EOF], shell = True)
及其不同的变体,例如将所有参数放入一个字符串和 运行ning
subprocess.Popen(["cad", string], shell = True)
尝试不换行,运行将每一行作为一个新行 subprocess.Popen 等。程序被正确调用,但新行上的参数(arguments2、arguments3、END 和 EOF 未发送正确地连接到程序,因此程序失败。
当您使用 shell=True
时,您必须以单个字符串而不是列表的形式提供命令。
subprocess.Popen("""cad arguments1 <<EOF
arguments2
arguments3
END
EOF""", shell = True)
但是您可以通过管道将输入从 Python.
传送到流程,而不是使用 here-docproc = subprocess.Popen(["cad", "arguments1"], stdin=subprocess.PIPE, text=True)
proc.communicate("""arguments2
arguments3
END""")