簡體   English   中英

Linux,Python開放終端運行全局python命令

[英]Linux, Python open terminal run global python command

不知道這是否可能。 我有一組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運行的腳本?

Ubuntu 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'] ,並等待輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM