2011-08-11 7 views
2

나는 우분투에서 일하고있다. 나는 많은 명령을 가지고있다. (cmd1, cmd2, cmd3 .............. cmd10과 같은 10 개의 명령)다른 위치에 다른 명령 적용하기

나는 다음과 같은 것을 달성 할 수있는 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

왜 파이썬인가? 이는 Bash와 같은 쉘에 더 적합합니다. 왜 안드로이드에 태그를 추가 했습니까? –

답변

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() 

단지 함수에서 각 명령을 넣어.

편집 : 다른 것이라고 생각했습니다. 파이썬 명령을 다른 디렉토리에서 실행하고 싶습니다. 그것은 다른 외부 프로그램의 경우, 사용이 call의 용도를 구체적으로 무엇을 할 때

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

이유는 Popenwait를 사용합니다.

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.Popen'과'wait' 대신'subprocess.call'을 사용할 수 있습니다. 같은 '남용'을 사용할 수도 있습니다 :). – 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

'os.system'은 쉘의 기능 (bash, COMMAND.COM, 뭐든간에)을 사용해야 할 때입니다. 단지 외부 프로그램을 시작해야 할 때가 아닙니다. 이를 완료하기 전까지는 블록킹하고 싶을 때 대답과 마찬가지로'subprocess.call'을 사용하십시오. – agf

관련 문제