Форум сайта python.su
Привет всем.
Нужно чтобы одна программа запускала другую и передавала ей при этом параметры.
Делаю так:
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)
и запускается с командной строки.
Офлайн
Во-первых, первым аргументом должно быть имя твоей программы, а потом уже передаешь остальные аргументы своей программе. Во-вторых, какой смысл вызывать execl в цикле, если первый же его вызов загрузит в текущий процесс новую программу?
YurietcP.S. man execl тебе в помощь :)def res(): args = ['1', '2', '3', '4', '5'] for arg in args: os.execl("D:\\temp\\restart.py", arg)
Офлайн
Да, нужно запускать как отдельный процесс. Но все равно что-то не получается.
В мануале сказано :
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.
Офлайн
slivlenЭто во-первых:) + можно и не настоящее имя передавать:)
Во-первых, первым аргументом должно быть имя твоей программы, а потом уже передаешь остальные аргументы своей программе.
Отредактировано (Окт. 4, 2007 19:21:25)
Офлайн
Возможно не
os.spawnv(os.P_NOWAIT, “D:\\temp\\restart.pyw”, )
а,
os.spawnv(os.P_NOWAIT, “python D:\\temp\\restart.pyw”, )
?
Офлайн
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)
Офлайн
можно так :
for arg in :
result = os.system('start D:\\temp\\restart.py' + arg)
Отредактировано (Окт. 21, 2007 00:39:58)
Офлайн