пятница, 14 октября 2011 г.

Запуск приложения с параметрами. Python

Столкнулся с интересной особенностью (хотя какая к черту особенность, баг это) при запуске приложений через spawnl Есть приложение callbuilder, которому надо передать параметры '/O1' чтоб не спрашивал оператора при запуске, '/c' чтоб закрывался после обработки файла и сам файл. Пишу

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) Все ок.
В итоге получается, что первый ключ, который я прописываю после имени исполняемого файла - не используется. Почему - не знаю.

3 комментария:

  1. А ты попробуй вот такой код выполнить на своей системе. Так хотя бы узнаешь, передаётся ли весь набор параметров. Ну и посмотри, что будет в 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()

    ОтветитьУдалить
  2. Сделал, вызываю так:
    C:\temporary>tmp05.py 1 2 3 4 5
    В log.txt:
    1
    2
    3
    4
    5
    Выходит что все передается и с проблемой, описанной выше, совсем ничего не понятно

    ОтветитьУдалить
  3. Если в 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

    ОтветитьУдалить