Linux,Python开放终端运行全局python命令

时间:2018-01-21 22:40:18

标签: python linux bash shell

不确定这是否可行。我有一组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

谢谢:)

2 个答案:

答案 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,并等待输入。