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



不确定这是否可能。我有一组 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通常在我启动的任何终端中都可用,但在这里我无法访问它,返回未找到文件。

我可以使用os启动一个新终端,然后输入my_command.py,它可以工作

os.system("x-terminal-emulator -e /bin/bash")

那么,有没有办法让第二种方法接受你想用 args 从 python 运行的脚本?

乌班图16

谢谢:)

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"文件,就像我打开终端窗口一样。

如果您使用的是 Gnome,gnome-terminal命令在这种情况下非常有用。

作为非常基本用法的示例,以下代码将生成一个终端,并在其中运行Python REPL:

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命令中:

subprocess.Popen(["gnome-terminal", "-e", "python my_script.py var1 var2"])

请注意,如果要使用特定版本的 Python 运行脚本,则应通过显式调用"python2"或"python3"来指定它。


一个小例子:

# 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将生成一个新终端,打印['my_script.py', 'hello', 'world'],并等待输入。

最新更新