Запуск сценария Python с использованием WshShell.Run в VBS не создает выходной файл - PullRequest
1 голос
/ 18 июля 2011

У меня есть проблема с некоторыми сценариями VB - не похоже, что это должно быть ужасно трудно решить, но даже после того, как я пробираюсь через многие страницы Google, я все еще не нашел решения.

[Проблема]

Вот мой файл python (test.py), упрощенный, чтобы просто показать проблему:

f = open("testing.txt", 'w')
f.write("oh hai\n")
f.close()

Конечно, при запуске непосредственно из командной строки,при этом файл генерируется так, как вы и ожидаете.

Однако при запуске в простом скрипте .vbs (ВНИМАНИЕ: у меня нет навыков работы с VBS. Наверное, поэтому у меня возникла проблема. Пока у меня нету меня было много проблем, кроме ненависти к жизни с использованием XP для программирования, когда я привык использовать vim)

Set WshShell = WScript.CreateObject("WScript.Shell")
cmd = "C:\Python27\python test.py"
WshShell.Run cmd

выходной файл не генерируется!Совсем!Это приводит в бешенство, так как, когда я ввожу эту точную команду ("C:\Python27\python test.py") в программу запуска из меню «Пуск», она работает!

[Информация о системе]

На работе, поэтому онина Windows XP.Все остальное довольно стандартно, или я так полагаю.

РЕДАКТИРОВАТЬ: Изменил "C: \ Python27 \ testing.py" на просто "testing.py".Это было оставлено с того момента, когда я пытался ее решить, и подумал, что, возможно, он помещал файлы где-то за пределами папки назначения.

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Во-первых, ваш скрипт на Python выглядит подозрительно, я сомневаюсь, что обратная косая черта работает в простой строке. По крайней мере, в моем тесте это не сработало, я просто заменил их косыми чертами.

Далее, вы можете увидеть сообщение об ошибке, добавив cmd с cmd /k, окно запуска останется на экране. Вы можете увидеть, что файл .py не найден, потому что его нет в текущем каталоге. Вы должны указать абсолютный путь к этому файлу, возможно, путем получения текущего пути из скрипта.

[EDIT] Я наконец-то получил рабочий код (мой VBS немного ржавый ...)

Dim wshShell, fso, loc, cmd

Set fso = CreateObject("Scripting.FileSystemObject")
loc = fso.GetAbsolutePathName(".")
WScript.Echo loc

'~ cmd = "%ComSpec% /k C:\Languages\Python\python.exe " + loc + "\test.py"
cmd = "C:\Languages\Python\python.exe " + loc + "\test.py"
WScript.Echo cmd

Set wshShell = CreateObject("WScript.Shell")
wshShell.Run cmd

Вы также можете проверить аргументы, если указан путь:

if WScript.Arguments.Count = 0 then
    loc = fso.GetAbsolutePathName(".")
else
    loc = WScript.Arguments(0)
end if

Такой скрипт лучше запускать с cscript, а не с wscript по умолчанию.

0 голосов
/ 18 июля 2011

Попробуйте

f = open("C:\\Python27\\testing.txt", 'w')

вместо вашей первой строки.

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