#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, чтобы он принимал параметры командной строки, и если они заданы, используйте их вместо «режима интерактивного пользовательского ввода». хотя это всего лишь предположение