Запустите скрипт python с аргументами

Я хочу вызвать скрипт Python из C, передав некоторые аргументы, необходимые в скрипте.

Сценарий, который я хочу использовать, – это mrsync или многоадресная удаленная синхронизация . Я получил эту работу из командной строки, позвонив:

python mrsync.py -m /tmp/targets.list -s /tmp/sourcedata -t /tmp/targetdata 

-m – это список, содержащий целевые ip-адреса. -s – это каталог, содержащий файлы для синхронизации. -t – это каталог на целевых компьютерах, где будут помещаться файлы.

Пока мне удалось запустить скрипт Python без параметров, используя следующую программу на C:

 Py_Initialize(); FILE* file = fopen("/tmp/myfile.py", "r"); PyRun_SimpleFile(file, "/tmp/myfile.py"); Py_Finalize(); 

Это прекрасно работает. Однако я не могу найти способ передать этот аргумент PyRun_SimpleFile(..) .

2 Solutions collect form web for “Запустите скрипт python с аргументами”

Похоже, вы ищете ответ, используя API-интерфейсы разработки python от Python.h. Вот вам пример, который должен работать:

 #My python script called mypy.py import sys if len(sys.argv) != 2: sys.exit("Not enough args") ca_one = str(sys.argv[1]) ca_two = str(sys.argv[2]) print "My command line args are " + ca_one + " and " + ca_two 

И затем код C, чтобы передать эти аргументы:

 //My code file #include <stdio.h> #include <python2.7/Python.h> void main() { FILE* file; int argc; char * argv[3]; argc = 3; argv[0] = "mypy.py"; argv[1] = "-m"; argv[2] = "/tmp/targets.list"; Py_SetProgramName(argv[0]); Py_Initialize(); PySys_SetArgv(argc, argv); file = fopen("mypy.py","r"); PyRun_SimpleFile(file, "mypy.py"); Py_Finalize(); return; } 

Если вы можете передать аргументы в свою C-функцию, эта задача станет еще проще:

 void main(int argc, char *argv[]) { FILE* file; Py_SetProgramName(argv[0]); Py_Initialize(); PySys_SetArgv(argc, argv); file = fopen("mypy.py","r"); PyRun_SimpleFile(file, "mypy.py"); Py_Finalize(); return; } 

Вы можете просто пройти через них. Теперь мои решения использовали только 2 аргумента командной строки для времени, но вы можете использовать ту же концепцию для всех 6, которые вам нужно пройти … и, конечно, есть более чистые способы захвата аргументов на стороне python, но это просто основная идея.

Надеюсь, поможет!

У вас есть два варианта.

  1. Вызов

     system("python mrsync.py -m /tmp/targets.list -s /tmp/sourcedata -t /tmp/targetdata") 

    в вашем C-коде.

  2. На самом деле используйте API, который mrsync (надеюсь). Это более гибко, но гораздо сложнее. Первым шагом будет выработка того, как вы выполняете вышеуказанную операцию как вызов функции Python. Если mrsync был написан красиво, будет существовать функция mrsync.sync (скажем), которую вы называете

     mrsync.sync("/tmp/targets.list", "/tmp/sourcedata", "/tmp/targetdata") 

    После того как вы разработали, как это сделать, вы можете вызвать функцию непосредственно из кода C, используя API Python.

  • Есть ли способ создать плагины Eclipse с Python?
  • Передача команды Аргумент строки скрипту Python в Eclipse (Pydev)
  • indent python file (с pydev) в eclipse
  • Выполнить строку кода Python в Eclipse
  • Принудительное затмение для перезагрузки модулей Python
  • Настройка проекта Python в eclipse
  • pydev importerror: нет модуля с именем thread, отладка больше не работает после обновления pydev
  • Eclipse + PyDev ImportError
  • Python - лучший язык программирования в мире.