php - 通过 telnet 从 python 调用 php

标签 php python telnet

我正在尝试从用 python 编写的简单 telnet 服务器调用一些 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()

在终端上,我连接到本地主机(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";
?>

最佳答案

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

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

关于php - 通过 telnet 从 python 调用 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11965907/

相关文章:

python - 如何显示多行而不是一行?

c# - 使用事件处理程序接收到的 TCP 客户端数据

java - 在 Java 中启动 VLC 并通过 rc 接口(interface)连接到它

c# - 如何从 telnet 或 SSH 访问 c# 套接字服务器?

php - 如何在 woocommerce 中获得免费送货的最低订购量

python - 使用 shlex 拆分多行字符串并保留引号字符

python - 如何使用Pygame将图像绕其中心旋转?

php编码文本解码

PHP进程执行超时

javascript - 使用 php 或 javascript 通过按钮 onclick