2011-08-11 39 views
2

我在Ubuntu中工作。 我有一堆命令(比如說像cmd1,cmd2,cmd3這樣的10個命令.............. cmd10)在不同位置應用不同的命令

我想寫一個python腳本,它可以實現如下:

它應該遍歷目錄結構並在特定的目錄路徑上應用命令 。 位置和命令已爲我所知。

以下是我想要腳本運行的示例。

/local/mnt/myspace/sample1$ cmd1 
/local/mnt/myspace/sample2$ cmd2 
/local/mnt/myspace$ cmd3 
/local/mnt$cmd4 
/local/mnt/myspace/sample9$ cmd 8 
/local/mnt/myspace/sample3$ cmd10 

有人可以請幫忙。

+0

爲什麼選擇Python?這更適合於像Bash這樣的外殼。爲什麼標籤爲android? –

回答

0

只需使用os.chdir(path)

喜歡的東西:

import os 
from itertools import izip 
paths = ('/local/mnt/myspace/sample1', '../sample2', 
     '../', '../', 'myspace/sample9/', '../sample3'] 
commands = (func1, func2, func3, func4, func5, func6) 
for path, command in izip(paths, commands): 
     os.chdir(path) 
     command() 

,只是把每個命令的功能。

編輯:我以爲這是不同的Python命令你想運行在不同的目錄。如果是不同的外部程序,使用方法:

commands = (['cmd1', 'arg1'], ['cmd2', 'arg2'], ...) 
for path, command in izip(paths, commands): 
     os.chdir(path) 
     subprocess.call(command) 

沒有理由使用Popenwait時,這是具體是什麼call是。

3

也許是這樣的:

import subprocess 
import os 
jobs=[ 
    ('/local/mnt/myspace/sample1', 'cmd1'), 
    ('/local/mnt/myspace/sample2', 'cmd2'), 
    ('/local/mnt/myspace', 'cmd3'), 
    ('/local/mnt', 'cmd4'), 
    ('/local/mnt/myspace/sample9', 'cmd', '8'), 
    ('/local/mnt/myspace/sample3', 'cmd10'), 
] 

for job in jobs: 
    print "In", job[0], "executing", job[1:] 
    os.chdir(job[0]) 
    subprocess.Popen(job[1:]).wait() 

(只是一個快速射擊)

看怎麼我有「濫用」在CMD 8的明顯錯誤,以顯示如何調用該帶參數的程序。

+1

您可以使用'subprocess.call'而不是'subprocess.Popen'和'wait'。你甚至可以使用相同的'濫用':)。 – agf

1
import os 

pathCommands = {r'C:\Windows':'dir', r'C:\test':'cd..' } 

for path, command in pathCommands.items(): 
    os.chdir(path) 
    os.system(command) 
+0

當您需要使用shell的特性(bash,COMMAND.COM,無論什麼)時,'os.system'就不需要啓動外部程序。爲此,當你想阻止它時,使用'subprocess.call'就像我在我的答案中所做的那樣。 – agf