2017-02-17 8 views
0

Я пытаюсь выполнить командный файл с использованием скрипта Python. Это возможно? Сценарий Python находится в другой папке, чем командный файл. Например, сценарий Python находится в C:\users\me\desktop\python, а командный файл находится в папке C:\users\me\desktop\batch. Я предпочитаю не использовать полный путь к пакетному файлу, потому что я хочу, чтобы он работал и на компьютере других людей (т. Е. Часть C:\users\me может отличаться).Выполнение командного файла с использованием сценария Python

Это сценарий, я пытался (выполняется из папки «питона» на рабочем столе)

from subprocess import call 

path = "..\batch" 
call([path+"\test.bat"]) 

Результат: файл не найден

+0

Возможный дубликат (http://stackoverflow.com/questions/5469301/run-a-bat-file-using-python-code) –

+2

Возможный дубликат [Побегайте .bat с использованием кода python] (http://stackoverflow.com/questions/5469301/run-a-bat-file-using-python-code) –

+0

Возможная дубликация [Выполнение подпроцесса не работает] (http: // stackoverflow .com/questions/1818774/executing-a-subprocess-fail) – feedMe

ответ

1

Backslash экранирует специальные символы в питона. Таким образом, путь, которые вы создаете здесь не те, что вы думаете, что они являются:

In [1]: test = "..\bfoo" 

In [2]: test 
Out[2]: '..\x08foo' 

Используйте сырые строки вместо:

In [3]: test = r"..\bfoo" 

In [4]: test 
Out[4]: '..\\bfoo' 

И на самом деле, лучший способ объединить сегменты пути в питоне используя os.path.join. Это автоматически позаботится о проблемах с обратной косой чертой и косой чертой для операционных систем Unix-lie или Windows.

+0

Спасибо, это сработало. Тем не менее, когда я запускаю скрипт Python, теперь он показывает мне код внутри командного файла без его выполнения? – vdvaxel

+0

В командной строке? Или он открывает новое окно. Однако это, вероятно, другой вопрос. – languitar

+0

Да, он показывает код в командной строке и не открывает новое окно. – vdvaxel

0

Использование os.path,

import os 

dir_path = os.path.dirname(os.path.realpath(__file__)) # get the full path of the Python file 
parent_dir = os.path.dirname(dir_path) 

new_path = os.path.join(parent_dir, 'bath', 'test.bat')