Столкнулся с интересной особенностью (хотя какая к черту особенность, баг это) при запуске приложений через spawnl
Есть приложение callbuilder, которому надо передать параметры '/O1' чтоб не спрашивал оператора при запуске, '/c' чтоб закрывался после обработки файла и сам файл.
Пишу
Меняю на os.spawnl (os.P_WAIT, callbuilder, '/O1', '/c', filename) спрашивает при старте, но закрывается как отработает.
Пишу os.spawnl (os.P_WAIT, callbuilder, '/1', '/c', '/O1', filename) Все ок.
В итоге получается, что первый ключ, который я прописываю после имени исполняемого файла - не используется. Почему - не знаю.
import os
callbuilder = 'c:\\callbuilder\\SMPCallBuilder.exe'
filename = 'c:\\CDR\\comlog_14_10_2011.tfs'
os.spawnl (os.P_WAIT, callbuilder, '/c', '/O1', filename)
Запускается, не спрашивает оператора при старте, но не закрывается.Меняю на os.spawnl (os.P_WAIT, callbuilder, '/O1', '/c', filename) спрашивает при старте, но закрывается как отработает.
Пишу os.spawnl (os.P_WAIT, callbuilder, '/1', '/c', '/O1', filename) Все ок.
В итоге получается, что первый ключ, который я прописываю после имени исполняемого файла - не используется. Почему - не знаю.
А ты попробуй вот такой код выполнить на своей системе. Так хотя бы узнаешь, передаётся ли весь набор параметров. Ну и посмотри, что будет в log.txt.
ОтветитьУдалитьЯ хз, как вставлять комменты с нормальным форматированием кода, которое очень важно для питона, поэтому заменил пробелы в начале строк на подчёркивание.
#!/usr/bin/env python
def main():
____import os
____import sys
____with open('log.txt', 'wt') as fw:
________fw.writelines([str(p) + '\n' for p in sys.argv[1:]])
________fw.write('\n')
if __name__ == '__main__':
____main()
Сделал, вызываю так:
ОтветитьУдалитьC:\temporary>tmp05.py 1 2 3 4 5
В log.txt:
1
2
3
4
5
Выходит что все передается и с проблемой, описанной выше, совсем ничего не понятно
Если в Python Shell делаю так:
ОтветитьУдалитьimport os
exe = r'c:\Python31\python.exe'
pyfile = r'c:\temporary\tmp05.py'
os.spawnl (os.P_WAIT, exe, pyfile, '1', '2', '3', '4', '5')
То в результате файла нет и возвращается 2
Но! если я делаю
os.spawnl (os.P_WAIT, exe, '0', pyfile, '1', '2', '3', '4', '5')
То в результате у меня есть файл со всеми цифрами и возвращается 0
То есть это косяк именно os.spawnl