Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 3, 2007 12:41:29

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запустить программу с параметром ?

Привет всем.
Нужно чтобы одна программа запускала другую и передавала ей при этом параметры.

Делаю так:

import os

def res():
args =
for arg in args:
os.execl(“D:\\temp\\restart.py”, arg)

if __name__ == ‘__main__’:
res()

но возникает ошибка :

Traceback (most recent call last):
File “<string>”, line 74, in run_nodebug
File “<Module1>”, line 9, in <module>
File “<Module1>”, line 6, in res
File “C:\Python25\lib\os.py”, line 322, in execl
execv(file, args)
OSError: Exec format error

Кто знает как это сделать правильно ?

P.S.
Запускаемая программа выглядит так :

import sys
def restart(arg):
print ‘Restarted with arg : ’, arg

if __name__ == ‘__main__’:
restart(sys.argv)

и запускается с командной строки.



Офлайн

#2 Окт. 3, 2007 13:33:09

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запустить программу с параметром ?

Во-первых, первым аргументом должно быть имя твоей программы, а потом уже передаешь остальные аргументы своей программе. Во-вторых, какой смысл вызывать execl в цикле, если первый же его вызов загрузит в текущий процесс новую программу?

Yurietc
def res():
    args = ['1', '2', '3', '4', '5']
    for arg in args:
        os.execl("D:\\temp\\restart.py", arg)
P.S. man execl тебе в помощь :)



Офлайн

#3 Окт. 4, 2007 14:47:36

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запустить программу с параметром ?

Да, нужно запускать как отдельный процесс. Но все равно что-то не получается.
В мануале сказано :

spawnv(mode, path, args)

Execute the program path in a new process. If mode is P_NOWAIT, this function returns the process ID of the new process.
…On Windows, the process ID will actually be the process handle.
И всеравно ошибка:

>>> import os
>>> os.spawnv(os.P_NOWAIT, “D:\\temp\\restart.pyw”, )

Traceback (most recent call last):
File “<pyshell#4>”, line 1, in <module>
os.spawnv(os.P_NOWAIT, “D:\\temp\\restart.pyw”, )
OSError: Exec format error

Кто сталкивался с подобной задачей, можно показать пример ?



Офлайн

#4 Окт. 4, 2007 19:18:23

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запустить программу с параметром ?

slivlen
Во-первых, первым аргументом должно быть имя твоей программы, а потом уже передаешь остальные аргументы своей программе.
Это во-первых:) + можно и не настоящее имя передавать:)
Во-вторых, spawn** запускает исполняемый файл, а не скрипты (в Винде именно, exe-файлы), поэтому ты и получил "OSError: Exec format error", так что смекай, что к чему должно быть аргументом и в каком порядке:)



Отредактировано (Окт. 4, 2007 19:21:25)

Офлайн

#5 Окт. 7, 2007 18:10:51

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запустить программу с параметром ?

Возможно не
os.spawnv(os.P_NOWAIT, “D:\\temp\\restart.pyw”, )

а,

os.spawnv(os.P_NOWAIT, “python D:\\temp\\restart.pyw”, )

?



Офлайн

#6 Окт. 20, 2007 21:45:15

lukke
От:
Зарегистрирован: 2007-01-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запустить программу с параметром ?

import os

PYTHONPATH = ‘C:/PROGS/Python25/python.exe’
PYTHONPROG = ‘Python’
SCRIPTPATH = ‘C:/restart.py’

def res():
args =
import random
os.spawnv(os.P_NOWAIT, PYTHONPATH, [PYTHONPROG, SCRIPTPATH, args])

if __name__ == ‘__main__’:
res()

Такой вариант устроит?



Отредактировано (Окт. 20, 2007 21:56:15)

Офлайн

#7 Окт. 21, 2007 00:35:33

umup
От:
Зарегистрирован: 2007-07-14
Сообщения: 53
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запустить программу с параметром ?

можно так :


for arg in :
result = os.system('start D:\\temp\\restart.py' + arg)



Отредактировано (Окт. 21, 2007 00:39:58)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version