[英]Get bash output with python
我試圖做一個簡單的命令,讓我可以在Python中完全運行bash,包括輸出字符串。
此功能在我使用的系統上效果很好:
import subprocess
def run(command):
output = subprocess.check_output(command, shell=True)
return output
但是,現在我在家中使用它,而PATH變量與我的終端中的變量不匹配。
所以當我執行
run('ls')
我得到這個:
/bin/sh: ls: command not found
這是有道理的,因為從運行中得到的路徑毫無意義
print run('/usr/bin/env')
是
PATH=/Library/Frameworks/Python.framework/Versions/Current/bin/
現在,我可以使用以下方法補救所有這些問題:
run('/bin/ls')
但這違反了使用此命令的全部目的,即忠實地模擬bash
shell。
如何使run()使用系統的PATH或創建一個等效的函數,該函數可以正常工作?
(請不要在乎使用'shell=True'
的危險。這全是個人使用,使用ls
和ps axw
等無害的命令。)
我離開這個問題是因為我認為上面的run()
命令很有用,而我在SO上找不到任何類似的東西。
但是,我的解決方案非常針對系統。 問題是,我正在Sublime Text 2中運行此腳本,並手動將Python.sublime-settings
的路徑替換為
"path": "/Library/Frameworks/Python.framework/Versions/Current/bin/",
我這樣做是因為我在讓ST2查找正確版本的python
遇到問題。 好的,這還會覆蓋ST2中的系統范圍的PATH變量,從而阻止了我對ls
類的簡單shell程序的訪問。
從Python.sublime-settings
刪除"path": ...
行解決了我的問題。
編輯
"path": "$PATH:/Library/Frameworks/Python.framework/Versions/Current/bin/",
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.