這種情況是使用的方法不正確導致的。
Python中執行系統命令常見的幾種方法如下:
1、os.system
例如:
>>> import os >>> os.system('ls') chk_err_log.py CmdTool.log install_log.txt install_zabbix.sh manage_deploy.sh MegaSAS.log
2、os.popen
例如:
>>> import os >>>tmp = os.popen('ls *.sh').readlines() >>>tmp ['install_zabbix.sh\n', 'manage_deploy.sh\n', 'mysql_setup.sh\n', 'python_manage_deploy.sh\n', 'setup.sh\n']
3、使用模塊subprocess
使用方法:
>>> import subprocess >>> subprocess.call (["cmd", "arg1", "arg2"],shell=True)
import subprocess p = subprocess.Popen('ls *.sh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) print p.stdout.readlines() for line in p.stdout.readlines(): print line, retval = p.wait()
4、 使用模塊commands模塊
使用方法:
>>> import commands >>> commands.getoutput('ls *.sh') 'install_zabbix.sh\nmanage_deploy.sh\nmysql_setup.sh\npython_manage_deploy.sh\nsetup.sh' >>> commands.getstatusoutput('ls *.sh') (0, 'install_zabbix.sh\nmanage_deploy.sh\nmysql_setup.sh\npython_manage_deploy.sh\nsetup.sh')
注意:當執行命令的參數或者返回中包含了中文文字,那麼建議使用subprocess,如果使用os.popen則會出現錯誤。
② Python語言命令行參數解析接收參數執行腳本的三種方法
在Windows系統上,Python腳本文件當然雙擊就能直接運行。不過我們往往需要在執行腳本的時候還要添加相應的參數,另外在Ubuntu系統中,我們執行文件往往和其他系統或用戶命令一樣,需要在終端中輸入,參數當然也要一並加上。所以機智客這里說的意思是,執行Python腳本(.py文件)時候需要輸入相應參數,這樣程序怎麼寫的方法。
上面這么說可能有點不明不白的,或者有朋友會用但未必知道命令行解析這種表達方式。舉個例子,比如我們在執行一個腳本文件的時候,可能會在CMD或者終端中輸入python demo.py 10或者python demo.py --separator 10後面這個數字就是參數。我們要編寫這樣的腳本或者函數,有哪些方法呢?這里列舉三種常用的。
一個是用系統模塊sys。引入模塊語句是import sys。也就是Python語言的內置庫中的sys.argv。argv通常有argv[0],argv[1],argv[2]這樣幾個參數。基本使用方法是m_sil_len = int(sys.argv[1])傳入第一個參數,sil_th = int(sys.argv[2])傳入第二個參數。如果是簡單一點的參數或者腳本,我們引入了sys。可以直接用這個傳入參數。
一種是用模塊argparse來實現,這是標准庫中推薦的命令行解析模塊。引入模塊語句是import argparse。基本使用方法是引入模塊後,先parser = argparse.ArgumentParser()創建對象,然後調用方法添加參數parser.add_argument("jzk", help="這是關於參數的說明", type=int),之後args = parser.parse_args()使用解析就可以用了。機智客看到這個方法在很多項目腳本中使用。我們在閱讀機器學習AI之類的開源項目,就會發現很多人用的都是這個方法。
還有一個就是用fire模塊,用於生成命令行界面的工具。引入模塊語言是import fire。它默認以-為參數分隔符的。基本使用方法是fire.Fire()。這個不僅可以做命令行的參數解析,還可以還給一個類class添加命令行。所以使用時候括弧里填入函數名或者類名即可,也就是裡面的參數可以是其他Python對象。
③ 怎麼在命令提示符中運行python程序
在命令提示符中運行python程序的方法是:1、右鍵點擊【我的電腦】,依次點擊【屬性】、【高級系統設置】、【環境變數】;2、將python的安裝路徑添加到PATH變數中;3、打開命令提示符,執行【python 文件路徑】命令即可。
具體方法:
(推薦教程:Python入門教程)
一、配置環境變數
1、右鍵點擊我的電腦,依次點擊屬性、高級系統設置、高級、環境變數;
2、在系統變數中找到Path,雙擊進行添加,選擇新建,輸入python的安裝路徑,例如我的安裝路徑是C:Program FilesAnaconda3python
二、運行python程序
1、打開命令提示符
2、執行命令「python python文件路徑」即可
④ 在python交互命令行中如何清屏
1、在Windows命令行窗口,顯示內容很多了,需要清屏,輸入cls後,回車。
⑤ Linux:Python編寫Linux自定義命令工具
摘要: Linux , Python
工作中需要頻繁使用到一個字元串的md5,因此編寫一個md5命令工具,輸入字元串直接得到輸出,並且命令支持參數設置,比如是否事先格式化,指定不同參數可以支持多功能輸出,操作步驟如下
直接vim一個腳本,腳本名md5不需要.py後綴,這樣更像一個命令,注意在腳本第一行引入python解釋器,並設置utf-8編碼
其中-f支持先格式化再得到md5,-l支持傳入多個字元串用空格分開
賦予可執行許可權
測試是否符合要求
直接放置到 /usr/local/bin 目錄下(需要root許可權)
也可以使用軟連接的方式,推薦使用絕對路徑
之後就可以在環境變數中直接使用到md5命令
shebang :中文翻譯「釋伴」,由 #! 開頭的字元串,出現在文本文件的 第一行 。類UNIX操作系統的程序載入器會分析shebang後的內容,將這些內容作為解釋命令,並調用該指令,並將載有 shebang的文件路徑作為該解釋器 的參數
比如 #!/bin/bash 就是使用/bin/bash作為解釋器運行腳本,如果以Python作為解釋器運行腳本先找到Python解釋器的路徑,一般在Linux自帶的 /usr/bin/python 是Python2版本,也可以指定其他Python版本 #!/opt/anaconda3/bin/python ,第二行為 # coding=utf-8 用來指定編碼格式,否則Python2輸出中文亂碼
對於自定義腳本,推薦放置在 /usr/local/bin 目錄,有多個可執行文件目錄在環境變數中,區別如下:
/bin : 包含二進制可執行文件,為系統最基本的命令,如ls等
/sbin : 與/bin 類似,不同之處是其為root許可權命令文件
/usr/bin : 系統預裝可執行文件,會隨著系統升級而改變
/usr/sbin : 同上,不同之處是其為root許可權運用
/usr/local/bin : 三級目錄,用戶自己的可執行文件,系統不管理
/usr/local/sbin : root許可權用戶程序
⑥ python 運行cmd系統命令
eg:os.system('ls')
這個會直接給出結果,但是沒有辦法進行進一步的保存和處理
2.os.popen(cmd)
eg:str = os.popen("ls").read()
a = str.split("\n")
會得到['1.ini',
'XXX.txt',
'XXX.txt',
'AndroidStudioProjects']
3.使用subprocess模塊
可以創建新的進程,可以與新建進程的輸入/輸出/錯誤管道連通,並可以獲得新建進程執行的返回狀態。
import subprocess
subprocess.call (["cmd", "arg1", "arg2"],shell=True)
#會直接列印出結果。
2、subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# shell設為true,程序將通過shell來執行,如果command不是一個可執行文件,shell=True是必須的
# stdin, stdout, stderr分別表示程序的標准輸入、輸出、錯誤句柄。他們可以是PIPE,文件描述符或文件對象,也可以設置為None,表示從父進程繼承。
# subprocess.PIPE實際上為文本流提供一個緩存區。
shell=True意思是shell下執行command
3. 使用模塊 commands模塊
import commands