如何将命令作为在 python 子进程内启动的 shell 的输入
我想创建一个 GUI python 脚本来启动多个进程。所有这些进程最初都是通过用perl脚本(start_workspace.perl)设置一个shell来调用的,并在shell下键入可执行文件名。 在start_workspace.perl里面,它首先设置一些ENV变量,然后调用exec(/bin/bash),它启动shell,所以你可以在提示符下输入“execfile”来启动。
我的问题是,从我的 python 脚本中,我仍然想使用这个 shell(通过 subprocess.popen("perl start_workspace.perl")),但我不想停止手动输入“execfile”。我希望我可以在调用“start_workspace.perl”的步骤中指定“execfile”,并且该过程可以在没有任何干预的情况下完成。
像命令重定向之类的东西。但我不知道是否可能。
subprocess.popen(("perl start_workspace.perl") < "execfile")
I want to create a GUI python script to launch several processes. All of these processes originally were called by setting up a shell with a perl script (start_workspace.perl), and type the executable file name under the shell.
inside, start_workspace.perl, it first set some ENV variables, and then call exec(/bin/bash), which launch the shell, so you can type "execfile" under the prompt to launch.
my problem, from my python script, I still want to use this shell (by subprocess.popen("perl start_workspace.perl")), but I do not want to be stopped to manually input "execfile". I want someway that I can specify the "execfile" at step of calling "start_workspace.perl", and the process can completed without any intervention.
something like command redirection. but I do not know if it is possible.
subprocess.popen(("perl start_workspace.perl") < "execfile")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你们非常接近。在子流程文档中,请参阅:
stdin、stderr 和 stdout 是 popen 方法的命名参数。您可以打开输入文件并将其文件描述符作为标准输入传递给新进程。
You are very close. In the subprocess documentation, see:
stdin, stderr, and stdout are named parameters for the popen method. You can open the input file and pass its file descriptor as stdin to your new process.
使用
subprocess
模块,可以通过这种方式实现。您可以使用标准输入流编写命令,以便在设置实际环境后执行。start_workspace.perl
在 python 中:
输出是
Using the
subprocess
module, it could be achieved this way. You can use the stdin stream to write your command to execute once the actual environment has been set.start_workspace.perl
In python:
Output is