使用从TCP套接字[python]收到的数据

时间:2015-04-06 00:49:07

标签: python sockets

所以,我试图通过python TCP套接字连接将参数传递给bash shell脚本。在bash shell中执行的脚本总是爆炸,即使我打印传递给os.system()或subprocess.call()的变量看起来是正确的。有任何想法吗? 代码的一小部分给了我一些问题。

while 1:
    conn, addr = s.accept()
    print 'Connected with ' + addr[0] + ':' + str(addr[1])    
    data = conn.recv(1024)
    if not data:
        break
    data2 = data.rstrip('\n')
    cmd = 'ls ' + data2
    #os.system(cmd)  
    subprocess.call([cmd], shell=True)
    print cmd

1 个答案:

答案 0 :(得分:1)

Python subprocess calldoc)需要执行单个字符串或参数列表。您将字符串作为单个参数传递,因此整个事物被解释为要执行的命令,当然无法找到。

subprocess.call(cmd, shell=True)subprocess.call(['ls', data2])

后者是首选,因为它意味着恶意调用者无法通过传递" foo来创建任意shell操作; rm -rf /&"插座。

注意:最好使用call(('ls', data2))(括号而不是括号)来创建一个简单的Python" tuple"而不是传递给call(...)的动态列表。