不确定这是否可行。我有一组python脚本,并修改了〜/ .bashrc中的linux PATH,这样每当我打开终端时,python脚本都可以作为命令运行。
export PATH=$PATH:/home/user/pythonlib/
my_command.py位于上述路径中。
我可以从终端的任何地方运行my_command.py(args),它将运行python脚本。
我想从不同的python脚本控制此功能,因为这将是自动化我的处理例程的最快解决方案。所以我需要它来打开一个终端并从我正在处理的python脚本中运行my_command.py(args)。
我尝试过子进程:
import subprocess
test = subprocess.Popen(["my_command.py"], stdout=subprocess.PIPE)
output = test.communicate()[0]
虽然my_command.py通常在我启动的任何终端都可用,但在这里我无法访问它,返回找不到的文件。
我可以使用操作系统启动一个新终端,然后输入my_command.py,它可以正常工作
os.system("x-terminal-emulator -e /bin/bash")
那么,有没有办法让第二种方法接受你想用pygs和args运行的脚本?
Ubuntu 16
谢谢:)
答案 0 :(得分:1)
Popen不会为您在python脚本中创建的会话加载系统PATH。您必须修改会话中的PATH以将目录包含在项目中,如下所示:
someterminalcommand = "my_command.py (args)"
my_env = os.environ.copy()
my_env["PATH"] = "/home/usr/mypythonlib/:" + my_env["PATH"]
combine = subprocess.Popen(shlex.split(someterminalcommand), env=my_env)
combine.wait()
这允许我从不同的python会话中运行我的“my_command.py”文件,就像打开终端窗口一样。
答案 1 :(得分:-1)
如果您正在使用Gnome,no_K_L <- df[!grepl(c("K"|"L"), df$C),]
命令在这种情况下非常有用。
作为一个非常基本的用法示例,以下代码将生成一个终端,并在其中运行Python REPL:
gnome-terminal
现在,如果要运行特定脚本,则需要将其路径与import subprocess
subprocess.Popen(["gnome-terminal", "-e", "python"])
连接起来,对于该列表的最后一个元素,它将是将在新终端中执行的行。
例如:
python
如果您的脚本是可执行的,则可以省略subprocess.Popen(["gnome-terminal", "-e", "python my_script.py"])
:
python
如果要将参数传递给脚本,只需将它们添加到subprocess.Popen(["gnome-terminal", "-e", "my_script.py"])
命令:
python
请注意,如果要使用特定版本的Python运行脚本,则应通过显式调用&#34; python2&#34;来指定它。或&#34; python3&#34;。
一个小例子:
subprocess.Popen(["gnome-terminal", "-e", "python my_script.py var1 var2"])
运行# my_script.py
import sys
print(sys.argv)
input()
# main.py
import subprocess
subprocess.Popen(["gnome-terminal", "-e", "python3 my_script.py hello world"])
会生成一个新终端,并打印python3 main.py
,并等待输入。