Найти - Пользователи
Полная версия: Как запустить программу с параметром ?
Начало » Python для новичков » Как запустить программу с параметром ?
1
Yurietc
Привет всем.
Нужно чтобы одна программа запускала другую и передавала ей при этом параметры.

Делаю так:

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)

и запускается с командной строки.
slivlen
Во-первых, первым аргументом должно быть имя твоей программы, а потом уже передаешь остальные аргументы своей программе. Во-вторых, какой смысл вызывать 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 тебе в помощь :)
Yurietc
Да, нужно запускать как отдельный процесс. Но все равно что-то не получается.
В мануале сказано :
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

Кто сталкивался с подобной задачей, можно показать пример ?
poltergeist
slivlen
Во-первых, первым аргументом должно быть имя твоей программы, а потом уже передаешь остальные аргументы своей программе.
Это во-первых:) + можно и не настоящее имя передавать:)
Во-вторых, spawn** запускает исполняемый файл, а не скрипты (в Винде именно, exe-файлы), поэтому ты и получил "OSError: Exec format error", так что смекай, что к чему должно быть аргументом и в каком порядке:)
Psixo
Возможно не
os.spawnv(os.P_NOWAIT, “D:\\temp\\restart.pyw”, )

а,

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

?
lukke
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()

Такой вариант устроит?
umup
можно так :


for arg in :
result = os.system('start D:\\temp\\restart.py' + arg)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB