所以,我试图通过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
答案 0 :(得分:1)
Python subprocess call
(doc)需要执行单个字符串或参数列表。您将字符串作为单个参数传递,因此整个事物被解释为要执行的命令,当然无法找到。
subprocess.call(cmd, shell=True)
或subprocess.call(['ls', data2])
后者是首选,因为它意味着恶意调用者无法通过传递" foo来创建任意shell操作; rm -rf /&"插座。
注意:最好使用call(('ls', data2))
(括号而不是括号)来创建一个简单的Python" tuple"而不是传递给call(...)
的动态列表。