От строки до float с argv в python

Я не могу преобразовать строку, переданную через командную строку, в функцию с плавающей точкой.

Я лучше объясню. У меня есть эта функция, которая принимает два аргумента, второй - число с плавающей запятой

def function():
   first_param = sys.argv[1]
   second_param = float(sys.argv[2])

Затем у меня есть другая функция, которая вызывает первую в программном контейнере.

def callFunction(first_arg, second_arg):
   cmd = 'docker run --rm -v pathFunction:/home/fenics/shared -w /home/fenics/shared quay.io/fenicsproject/stable "python2 function.py ' + first_arg + str(second_arg)
   process = subprocess.Popen(cmd, shell=True)

Когда я звоню:

callFunction("some_string",0.02)

он возвращает мне ошибку в функции в строке, в которой я пытаюсь преобразовать в float, говоря: не удалось преобразовать строку в float: shell

ОБНОВЛЕНИЕ Я обнаружил, что проблема в том, что первая строка, которую я передаю, - это путь с некоторыми пробелами. Что-то вроде: some_string = C: \ blabla \ my directory \ file.txt "с пробелом между" my "и" directory ". Я не могу изменить путь, знаете, как это исправить?


person SnowyNe    schedule 02.03.2018    source источник
comment
Разве последняя строка не должна быть process = subprocess.Popen(cmd1, shell=True)?   -  person tenfishsticks    schedule 02.03.2018
comment
В конце вашего cmd, + first_arg + str(second_arg), вероятно, должен быть пробел между аргументами, верно? Я полагаю, вы хотите some_string 0.02 вместо some_string0.02.   -  person 0x5453    schedule 02.03.2018


Ответы (2)


cmd = 'docker run --rm -v pathFunction:/home/fenics/shared -w /home/fenics/shared quay.io/fenicsproject/stable "python2 function.py ' + first_arg + str(second_arg)

Вам не хватает пробела между первым и вторым аргументом. Должен быть:

cmd = 'docker run --rm -v pathFunction:/home/fenics/shared -w /home/fenics/shared quay.io/fenicsproject/stable "python2 function.py ' + first_arg + ' ' + str(second_arg)

редактировать

как уже указывалось, вам также не хватает ". Вот как это должно быть

cmd = 'docker run --rm -v pathFunction:/home/fenics/shared -w /home/fenics/shared quay.io/fenicsproject/stable "python2 function.py ' + first_arg + ' ' + str(second_arg) + '"'
person Maciej Kozik    schedule 02.03.2018
comment
А может, и закрытие " тоже? - person Robᵩ; 02.03.2018
comment
Проблем не было пространство, просто забыл написать сюда. - person SnowyNe; 02.03.2018
comment
Я нашел проблему. Первая строка, которую я передаю, - это путь, в котором есть пробелы (некоторый каталог с такими именами, как «мой каталог»), поэтому путь разделен на argv. Вы знаете, как я могу это исправить? - person SnowyNe; 02.03.2018
comment
Экранируйте пробелы с помощью символа \. См. Здесь: stackoverflow.com/questions/12902227/ - person Maciej Kozik; 02.03.2018

Измените sys.argv[1] на sys.argv[0] и sys.argv[1] на sys.argv[2]

def function():
   first_param = sys.argv[0]
   second_param = float(sys.argv[1])

индексы аргументов начинаются с 0, а не с 1.

Ознакомьтесь с руководством. учебное пособие

person Morse    schedule 02.03.2018
comment
Это не работает, он говорит мне: невозможно преобразовать из строки в метод с плавающей запятой: - person SnowyNe; 02.03.2018
comment
Это неправильно, sys.argv [0] всегда установлен, и это имя сценария. - person Maciej Kozik; 02.03.2018
comment
Я подумал, что это проблема, потому что он упомянул callFunction (some_string, 0.02). Позже увидел ваш ответ. - person Morse; 02.03.2018