2014-09-05 121 views
0

是否有可能在Python中使用os.system()發送相關命令列表?我的意思是,如果我想將當前目錄更改爲特定的目錄,然後列出內容,我該怎麼做? (我不想使用dir "path" - 我想同時更改當前目錄,並列出目錄)如何發送命令列表使用'os.system('命令')'到python中的CMD

注意:這只是一個示例,我想知道如何發送多個命令! (一排一些相關的命令)

注:Python的3.2

+1

不知道是否適用於Windows,但在* nix你可以使用使用os.system(「CD /路徑/到/地方; DIR」) - 簡單的說命令之間的分號。 – 2014-09-05 16:23:22

+0

在Windows中,您可以使用'&'來達到同樣的目的。此命令將列出您的主目錄的內容並暫停,直到您按Enter鍵。 'os.system(r'cd%USERPROFILE%&dir&pause> nul')' – Noumenon 2017-12-08 00:50:01

回答

3

使用os.system使用本地系統外殼。你可以這樣做,因爲@Rwaing在許多unixy shell上建議,但不是像windows這樣的其他地方。更好的選擇是subprocess.call和CWD(當前工作目錄)參數

import subprocess 
subprocess.call('dir', shell=True, cwd='somepath') 

正如其他人所提到的,如果你真的想要做的就是在文件列表中,existin Python API中做它相當好。

編輯發送多發命令

一種方式來發送多個命令是將其泵入子shell的標準輸入。它的外殼相關的,但這裏有一個窗口例如:

import os 
import subprocess as subp 
p=subp.Popen('cmd.exe', shell=True, stdin=subp.PIPE) 
p.stdin.write("""dir 
cd "\\program files" 
dir 
""") 
p.stdin.write('exit' + os.linesep) 
p.wait() 
del p 
print 'done' 
+0

我認爲人們首先回避Popen子流程,但是一旦人們掌握了它,他們就消除了大部分工作壓力Python中的本地操作系統。快速,可移植的SQL工作就是一個例子。處理從嘗試的shell命令返回的錯誤是另一回事。 – Aphid 2014-09-05 19:11:12

+0

親愛的tdelaney,你的代碼在Python 2.7中對我很好,但是我在python 3.4中收到錯誤(我已經把最後一行改爲'print('done')')。我遇到這個錯誤:>>> Traceback(最近一次調用最後一次): 文件「C:/Users/ghasemi.IT/Desktop/pypy.py」,第7行,在 「」「) TypeError: 'str'不支持緩衝接口>>>' – TheGoodUser 2014-09-07 08:26:48

2

無需系統調用在這裏。 os函數chdirlistdir將分別更改當前目錄和列出目錄中的文件。