【问题标题】:From string to float with argv in python在python中从字符串到使用argv浮动
【发布时间】:2018-08-11 02:21:08
【问题描述】:

我无法将通过命令行传递的字符串转换为要浮动的函数。

我会解释得更好。 我有这个函数,它接受两个参数,第二个是浮点数

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)

它在我尝试将转换为浮动的那一行返回一个函数错误: 无法将字符串转换为浮点数:shell

更新 我发现问题在于我传递的第一个字符串是一个包含一些空格的路径。就像是: some_string = C:\blabla\我的目录\file.txt" 在“我的”和“目录”之间有一个空格。我无法更改路径,您知道我该如何解决吗?

【问题讨论】:

  • 最后一行不应该是process = subprocess.Popen(cmd1, shell=True)吗?
  • cmd 的末尾,+ first_arg + str(second_arg) 的参数之间应该有一个空格,对吧?我想你想要some_string 0.02 而不是some_string0.02

标签: python command-line subprocess args


【解决方案1】:
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) + '"'

【讨论】:

  • 也可以结束"
  • 空间不是问题,我只是忘记在这里写了。
  • 我找到了问题所在。我传递的第一个字符串是一个路径,其中包含一些空格(某些目录的名称类似于“我的目录”),因此该路径通过 argv 进行拆分。你知道我该如何解决它吗?
  • 用 \ 字符转义空格。见这里:stackoverflow.com/questions/12902227/…
【解决方案2】:

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。

查看教程。tutorial

【讨论】:

  • 它不起作用,它对我说:无法从字符串转换为浮点数:方法
  • 这是错误的,sys.argv[0] 总是设置的,它是脚本的名字。
  • 我以为是这个问题,因为他提到 callFunction("some_string",0.02) 后来看到你的回答
猜你喜欢
  • 2021-10-09
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2015-04-11
  • 1970-01-01
相关资源
最近更新 更多