2012-08-15 2 views
1

파이썬으로 작성된 간단한 telnet-server에서 일부 PHP 스크립트를 호출하려고합니다. 여기에 코드가 있습니다. 나는 (텔넷 로컬 호스트 5000) 로컬 호스트 및 명령 '캘크 /home/mechanic/python/forloop.php'를 실행에 연결 터미널에 텔넷을 통해 파이썬에서 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() 

. 경로가 시스템에 존재하므로 수동으로 실행할 수 있습니다. 그러나 스크립트는 나에게이 오류 반환 :

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

을하지만 파이썬 스크립트에서 수동으로 경로를 작성하는 경우

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

모든 잘 작동합니다. 실수를 어디에서 취할 수 있습니까?

P. 여기 당신이 recvCommand.strip() 대신 원래의를 사용하여 시도 적이 forloop.php

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

의견을 말하면 영어로 사용해야합니다.) – hakre

답변

2

의 코드는? 나는 recvCommand가 텔넷 클라이언트에서 개행과 캐리지 리턴을 포함한다고 생각한다.

명령 수신이 때때로 실패 할 수도 있습니다. 모든 데이터가 단일 수신 호출에 도착할 것이라는 보장이 없습니다. 개행 문자를받을 때까지 데이터를 연결해야합니다. 경우에 따라 명령이 둘 이상의 버퍼에 도달 할 수 있으므로 코드를 사용할 수 없습니다.