通过telnet从python调用php

时间:2012-08-15 08:04:38

标签: php python telnet

我正在尝试从python编写的简单telnet-server调用一些php脚本。这是一个代码。

  # -*- coding: utf8 -*-
  #!/usr/bin/env python
  # скрипт перекидывает выполнение нужного скрипта на определённый порт

  import socket
  import os
  from commands import *
  import subprocess

  #define server properties
  host = ''
  port = 5000
  backlog = 5
  size = 1024

  # configure the server socket
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.bind((host,port))
  s.listen(backlog)

  # handle client requests
  while 1:
      client, address = s.accept()
      data = client.recv(size)
      print data
      if data:
  #находим путь для выполняемого скрипта
              recvCommand = data[5:]
              print recvCommand
              userCommand = u'' + recvCommand
              #userCommand = u''+'/home/mechanic/python/forloop.php'
              res = subprocess.call(["php", userCommand])
              client.send(data)

 35     client.close()

在终端,我连接到localhost(telnet localhost 5000)并运行命令'calc /home/mechanic/python/forloop.php'。该路径存在于系统中,我可以手动运行它。 但脚本给我发了这个错误:

Could not open input file: /home/mechanic/python/forloop.php

但是如果我在python脚本中手动编写这个路径

userCommand = u''+'/home/mechanic/python/forloop.php'

一切正常。我哪里可以搞错?

P.S。这是forloop.php的代码

<?
for (  $i = 0 ;  $i <= 1000000;  $i++  )
echo "Welcome $i times\n";
?>

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用recvCommand.strip()代替原创代码?我认为recvCommand包含来自telnet客户端的换行符和回车符。

您的命令接收有时可能会失败,无法保证所有数据都会在单个recv呼叫中到达。您应该连接数据,直到收到换行符。 在某些情况下,您的命令可能会到达多个缓冲区,您的代码将无法使用它。