Python: возможно ли изменить текущий каталог оболочки командной строки Windows без изменения текущего текущего каталога? - PullRequest
5 голосов
/ 03 февраля 2011

Я использую os.system() для выполнения оболочки Windows. Я хотел бы изменить текущий каталог Windows cmd. Вот один из способов сделать это:

os.chdir('newPath')

Но chdir() также изменит текущий текущий рабочий каталог Python. Я не хочу менять фактический рабочий каталог Python, потому что я хочу, чтобы другие части моего скрипта работали в исходном текущем рабочем каталоге. Я хочу изменить только текущий рабочий каталог Windows cmd. Другими словами: я хочу, чтобы команды os.system() выполнялись в одном текущем рабочем каталоге (текущий рабочий каталог Windows cmd), а все остальное должно выполняться в другом текущем рабочем каталоге (текущий текущий рабочий каталог Python).

Вот еще одна попытка изменить только текущий каталог Windows cmd:

os.system('cd newPath')

Однако это, очевидно, не работает, поскольку сразу после выполнения команды cd newPath текущий каталог Windows cmd сбрасывается (поскольку я не буду использовать ту же командную оболочку Windows при следующем вызове os.system()) .

Возможно ли иметь отдельный текущий рабочий каталог для оболочки Windows cmd? (отдельно от фактического текущего рабочего каталога).

Ответы [ 3 ]

7 голосов
/ 03 февраля 2011

Модуль subprocess предназначен для замены os.system.

Помимо прочего, он дает вам subprocess.Popen(), который принимает аргумент cwd для указания рабочего каталога для порожденного процесса (именно для вашей ситуации).*http://docs.python.org/library/subprocess.html

Пример использования замены os.system:

p = subprocess.Popen("yourcmd" + " yourarg", shell=True, cwd="c:/your/path")
sts = os.waitpid(p.pid, 0)[1]
1 голос
/ 03 февраля 2011

Когда вы используете os.system, вы не используете одну и ту же командную оболочку, а порождаете новую для каждого запроса.Это означает, что вы не можете ожидать, что изменения в нем будут распространяться между вызовами.

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

1 голос
/ 03 февраля 2011

Если это работает только в Windows, одним из способов может быть:

os.system('start /d newPath cmd')
...