Python 如何将float argv参数传递给另一个脚本?

Python 如何将float argv参数传递给另一个脚本?,python,ubuntu-16.04,Python,Ubuntu 16.04,我试图在终端中使用python test运行一个名为test的简单脚本,以便调用另外两个脚本 这是我正在运行的脚本 #!/usr/bin/env python import sys import rospy import subprocess import time from geometry_msgs.msg import Twist from std_msgs.msg import Empty subprocess.call("./takeoff_sim") time.sleep(2

我试图在终端中使用
python test
运行一个名为
test
的简单脚本,以便调用另外两个脚本

这是我正在运行的脚本

#!/usr/bin/env python

import sys
import rospy
import subprocess
import time

from geometry_msgs.msg import Twist
from std_msgs.msg import Empty

subprocess.call("./takeoff_sim")

time.sleep(2)

subprocess.call("./forward_sim" + sys.argv[5.0] + sys.argv[2.0])
但我得到了以下错误:

回溯(最近一次呼叫最后一次):
文件“测试”,第15行,在
子进程调用([“/forward_sim”]+sys.argv[5.0]+sys.argv[2.0])
TypeError:列表索引必须是整数,而不是浮点
在这种情况下,两个参数都需要一个浮点数,因此,我不能仅仅将它们更改为int
0.5
应该是第一个参数,而
2.0
应该是第二个参数。以下是
forward\u sim
脚本:

#!/usr/bin/env python
import sys
import rospy
from geometry_msgs.msg import Twist

def commander(speed, time):
    movement_publisher = rospy.Publisher('cmd_vel', Twist , queue_size=10)
    rospy.init_node("bebop_commander") #Use log_level=rospy.DEBUG to see debug messages
    rate = rospy.Rate(20) # 20hz
    counter = 0.0
    movement_cmd = Twist()

    while not rospy.is_shutdown():
        movement_cmd.linear.x = speed
        movement_cmd.linear.y = 0
        movement_cmd.linear.z = 0
        movement_cmd.angular.x = 0
        movement_cmd.angular.y = 0
        movement_cmd.angular.z = 0
        rospy.logdebug("Publishing")
    counter += 0.05
        movement_publisher.publish(movement_cmd)
        rate.sleep()
        if counter >= time:
        break

if __name__ == '__main__':
    speed = float(sys.argv[0])
    time = float(sys.argv[1])


rospy.logdebug("Adelante") # Use rospy.logdebug() for debug messages.
print("Adelante")

if speed > 0:
        rospy.logdebug("Velocidad = %s m/s", speed)
    print("Velocidad =",speed," m/s",)
else:
        raise ValueError("Falta parametro de velocidad o el valor es incorrecto")

if time > 0 :
        rospy.logdebug("Tiempo = %s s", time)
    print("Tiempo =" ,time, " s")
else:
        raise ValueError("Falta parametro de tiempo o el valor es incorrecto")

try:
    commander(speed, time)
except rospy.ROSInterruptException:
    pass

sys.argv
仅用于接收参数。要将值作为参数传递给另一个脚本,只需将它们转换为字符串并直接添加到命令行

subprocess.call(["./forward_sim", str(5.0), str(2.0)])
当另一个脚本接收到它们时,它需要将每个字符串转换回浮点:

# This is forward_sim

arg1 = float(sys.argv[1])
arg2 = float(sys.argv[2])

请注意,
sys.argv[0]
是脚本本身的名称,而不是第一个参数。

sys.argv
仅用于接收参数。要将值作为参数传递给另一个脚本,只需将它们转换为字符串并直接添加到命令行

subprocess.call(["./forward_sim", str(5.0), str(2.0)])
当另一个脚本接收到它们时,它需要将每个字符串转换回浮点:

# This is forward_sim

arg1 = float(sys.argv[1])
arg2 = float(sys.argv[2])

请注意,
sys.argv[0]
是脚本本身的名称,而不是第一个参数。

您想用
1:0.5
2:2.0
做什么?您不需要
sys.argv
。您需要带有浮点数的字符串
[“/forward\u sim”、“0.5”、“2.0”]
。或者有时一个字符串带有空格
“/forward\u sim 0.5 2.0”
.FWIW,
sys.argv
是一个列表,因此它的元素在
[]
字符中使用整数引用(也称为索引)。i、 e.
sys.argv[0]
是脚本名,
sys.argv[1]
是它的第一个参数,等等。argv元素总是字符串——在操作系统级别,它们不能是其他任何东西。该字符串是对浮点数进行编码还是从浮点数进行解码几乎无关紧要。您想用
1:0.5
2:2.0
做什么?您不需要
sys.argv
。您需要带有浮点数的字符串
[“/forward\u sim”、“0.5”、“2.0”]
。或者有时一个字符串带有空格
“/forward\u sim 0.5 2.0”
.FWIW,
sys.argv
是一个列表,因此它的元素在
[]
字符中使用整数引用(也称为索引)。i、 e.
sys.argv[0]
是脚本名,
sys.argv[1]
是它的第一个参数,等等。argv元素总是字符串——在操作系统级别,它们不能是其他任何东西。该字符串是对浮点数进行编码还是从浮点数进行解码几乎无关紧要。