python:如何从另一个程序中使用命令行调用(以用户的键击作为输入)运行程序?

时间:2016-07-29 20:18:39

标签: python ros

我可以在命令行中键入:python enable_robot.py -e来运行一个程序,但我想从另一个程序中运行它。

在另一个程序中,我导入了子进程并且有subprocess.Popen(['enable_robot', 'baxter_tools/scripts/enable_robot.py','-e']),但是我收到一条错误消息,说明有关回调的信息。

如果我注释掉这一行,我程序的其余部分就可以正常工作了。

有关如何更改此行以使我的代码工作或者我根本不应该使用子进程的任何建议?

2 个答案:

答案 0 :(得分:0)

如果enable_robot.py需要用户输入,可能不打算从另一个python脚本运行。您可能希望将其作为模块导入:import enable_robot并从那里运行您要使用的功能。

如果您想坚持使用子流程,可以使用communicate传递输入:

p = subprocess.Popen(['enable_robot', 'baxter_tools/scripts/enable_robot.py','-e'])
p.communicate(input=b'whatever string\nnext line')

communicate documentationexample

答案 1 :(得分:0)

您的计划enable_robot.py应符合以下要求:

  • 第一行是指示用于解释的程序的路径 剧本。在这种情况下,它是python路径。
  • 您的脚本应该是可执行的

一个非常简单的例子。我们有两个python脚本:called.py和caller.py

用法:caller.py将使用subprocess.Popen()

执行called.py.

文件/tmp/called.py

#!/usr/bin/python
print("OK")

文件/tmp/caller.py

#!/usr/bin/python
import subprocess
proc = subprocess.Popen(['/tmp/called.py'])

使两者都可执行:

chmod +x /tmp/caller.py
chmod +x /tmp/called.py

caller.py输出:

  

$ /tmp/caller.py

     

$ OK