這是最簡單的方法,它的特點是在執行時,程序會打印出在linux上執行cmd的信息。使用前需要導入操作系統。
[python]
操作系統(“ls”)
2.使用Popen模塊生成新流程。
現在大部分人都喜歡用Popen。Popen方法不會打印出cmd是在linux上執行的。
線路信息。的確,Popen非常強大,支持多種參數和模式。使用前需要從子流程導入Popen。
煙鬥.但是Popen函數有壹個缺陷,就是它是壹個阻塞方法。如果運行cmd時產生大量內容,該功能非常容易被屏蔽。解決方法是不使用
Wait()方法,但也無法獲得執行的返回值。
Popen的原型是:
[python]
子流程。Popen(args,bufsize=0,executable=None,stdin=None,stdout=None,stderr=None,preexec_fn=None,close_fds=False,shell=False,cwd=None,env=None,universal_newlines=False,startupinfo=None,creationflags=0)
參數bufsize:指定緩沖區。我還不知道這個參數的具體含義,希望大家給點意見。
參數executable用於指定壹個可執行程序。通常,我們將程序設置為通過args參數運行。如果參數shell設置為True,可執行文件將指定程序使用的shell。在windows平臺上,缺省shell由COMSPEC環境變量指定。
參數stdin、stdout、stderr分別代表程序的標準輸入、輸出和錯誤句柄。它們可以是管道、文件描述符或文件對象,也可以設置為None,這意味著它們是從父進程繼承的。
參數preexec_fn只在Unix平臺下有效,用於指定壹個可執行對象,在子進程運行前會調用該對象。
參數Close_sfs:在windows平臺上。
如果close_fds設置為True,新創建的子流程將不會繼承父流程的輸入、輸出和錯誤管理。
陶。我們不能將close_fds設置為True來同時重定向子流程的標準輸入、輸出和錯誤(stdin、stdout、stderr)。
如果參數shell設置為true,程序將通過shell執行。
參數cwd用於設置子流程的當前目錄。
參數env是壹個字典類型,用於指定子流程的環境變量。如果env = None,子進程的環境變量將從父進程繼承。
參數Universal_newlines:不同操作系統下文本的換行符不同。例如,'/r/n '用於windows,而'/n '用於Linux。如果此參數設置為True,Python會將這些換行符統壹視為'/n '。
參數startupinfo和createionflags只在windows下起作用,它們會被傳遞給底層的CreateProcess()函數來設置子進程的壹些屬性,比如主窗口的外觀,進程的優先級等等。
子流程。管
創建Popen對象時,子進程。PIPE可以初始化stdin、stdout或stderr參數,以表示與子進程通信的標準流。
子流程。標準輸出
創建Popen對象時,它用於初始化stderr參數,指示錯誤通過標準輸出流輸出。
波普方法:
Popen.poll()
用於檢查子流程是否已經結束。設置並返回returncode屬性。
Popen.wait()
等待子流程結束。設置並返回returncode屬性。
Popen.communicate(輸入=無)
與子流程交互。向stdin發送數據或從stdout和stderr讀取數據。可選的參數輸入指定發送給子進程的參數。
Communicate()返回壹個元組:(stdoutdata,
stderrdata).註意:如果要通過進程的stdin向進程發送數據,那麽在創建Popen對象時,必須將參數stdin設置為PIPE。類似的,比如
如果要從stdout和stderr獲取數據,必須將stdout和stderr設置為PIPE。
Popen.send_signal(信號)
向子進程發送信號。
Popen.terminate()
停止子進程。在windows平臺下,這個方法會調用Windows API TerminateProcess()來結束子進程。
Popen.kill()
殺死子進程。
Popen.stdin
如果創建了Popen對象,則參數stdin設置為PIPE,Popen.stdin將返回壹個file對象,供子進程發送指令。否則不返回任何內容。
Popen.stdout
如果創建了Popen對象,則參數stdout設置為PIPE,Popen.stdout將返回壹個file對象,供子進程發送指令。否則不返回任何內容。
Popen.stderr
如果創建了Popen對象,則參數stdout設置為PIPE,Popen.stdout將返回壹個file對象,供子進程發送指令。否則不返回任何內容。
Popen.pid
獲取子進程的進程ID。
Popen.returncode
獲取進程的返回值。如果進程沒有完成,則返回None。
例如:
[python]
p = Popen("cp -rf a/* b/",shell=True,stdout=PIPE,stderr=PIPE)
p .等待()
if p.returncode!= 0:
打印“錯誤”
return -1
3.使用commands.getstatusoutput方法
這個方法不會打印出在linux上執行cmd的信息。這種方法的唯壹優點是它不是壹種阻塞方法。也就是不存在Popen函數阻塞的問題。使用前需要導入命令。
例如:
[python]
status,output = commands . getstatusoutput(" ls ")
還有壹些方法只獲取輸出和狀態:
[python]
commands.getoutput("ls ")
commands.getstatus("ls ")