Применение разных команд в разных местах - PullRequest
2 голосов
/ 11 августа 2011

Я работаю в Ubuntu. У меня есть несколько команд (скажем, 10 команд, таких как cmd1, cmd2, cmd3 .............. 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

Может кто-нибудь, пожалуйста, помогите в этом.

Ответы [ 3 ]

3 голосов
/ 11 августа 2011

Может быть, что-то вроде этого:

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 голос
/ 11 августа 2011
import os

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

for path, command in pathCommands.items():
    os.chdir(path)
    os.system(command)
0 голосов
/ 11 августа 2011

Просто используйте 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)

Нет смысла использовать Popen и wait, когда это именно то, для чего call.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...