Не удается передать параметры в pythonscript из ant build.xml файл. Как я могу передать значение?

#python #xml #build #ant

#python #xml #сборка #ant

Вопрос:

Я пытаюсь запустить программу на python из моего ant build.xml файл при запуске build.xml файл я не могу передать аргументы скрипту python

Программа Python для проверки факториала заданного числа:

fact.py

 #!/usr/bin/python

def factorial(num):
    if num == 1:
        return num
    else:
        return num * factorial(num - 1)

 num = int(input('Enter a Number: '))
 if num < 0:
     print 'Factorial cannot be found for negative numbers'
 elif num == 0:
     print 'Factorial of 0 is 1'
 else:
     print ('Factorial of', num, 'is: ', factorial(num))
  

The build.xml файл выглядит так, как показано ниже:

 <project name="ant_test" default="python" basedir=".">
<target name="python" >
        
        <exec dir="D:apppython" executable="D:apppythonpython.exe" failonerror="true">
            <arg line="D:appant-workoutfact.py/>
        </exec>
</target>
  

при запуске build.xml файл запускает факт.программа python, и она ожидала ввода пользователем для проверки факториала заданного числа.

Как я могу передать число в программу python из ant build.xml файл

Заранее спасибо!!!!!

Ответ №1:

Согласно документации

Обратите внимание, что вы не можете взаимодействовать с разветвленной программой, единственный способ отправить в нее ввод — через атрибуты input и inputstring. Также обратите внимание, что начиная с Ant 1.6, любая попытка прочитать входные данные в разветвленной программе получит EOF (-1). Это изменение по сравнению с Ant 1.5, где такая попытка была бы заблокирована.
(курсив мой)

Итак, что вы можете сделать? Предоставьте любой из:

ввод
Файл, из которого берется стандартный ввод выполняемой команды. Этот атрибут является взаимоисключающим с атрибутом inputstring.

входная строка
Строка, которая служит входным потоком для выполняемой команды. Этот атрибут является взаимоисключающим с атрибутом ввода.


Пример:

 <project name="ant_test" default="python" basedir=".">
<target name="python" >
        
        <exec dir="D:apppython" executable="D:apppythonpython.exe" 
                                  failonerror="true" 
                                  inputstring="42">
            <arg line="D:appant-workoutfact.py/>
        </exec>
</target>
  

Комментарии:

1. Если мне нужно передать более одного ввода, как я могу это сделать?

2. @john попробуйте input=... — я предполагаю, что вы могли бы поместить 1 ввод на строку в файл, и каждый из них служил бы для одного оператора pythonic ‘input()’. Возможно, вам лучше перепроектировать свой скрипт pyhton, чтобы он принимал параметры командной строки, и если они заданы, используйте их вместо «режима интерактивного пользовательского ввода». хотя это всего лишь предположение