【问题标题】:Call php from python over telnet通过 telnet 从 python 调用 php
【发布时间】:2012-08-11 13:08:54
【问题描述】:

我正在尝试从用 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'

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

附:这里是forloop.php的代码

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

【问题讨论】:

  • 你应该在我想说的 cmets 中使用英语;)

标签: php python telnet


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-10-30
    • 2014-03-15
    • 2015-10-01
    • 2011-09-11
    • 2019-01-12
    • 2017-07-26
    • 2011-11-18
    • 2011-08-14
    • 2011-11-13
    相关资源
    最近更新 更多