[英]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.