从PHP执行Python脚本,时间问题?

从PHP执行Python脚本,时间问题?,php,python,Php,Python,我想在我的脚本完成之前,我有一些计时器即将过期。我发现这个教程很不错。它开始工作,但在完成之前停止打印脚本中的调试消息 我的PHP代码: <?php $param1 = '"romAudit"'; $param2 = '"Nintendo Entertainment System"'; $param3 = "third"; $command = "python scripts/arcade_functions.py"; $command .= " $param1 $param2";

我想在我的脚本完成之前,我有一些计时器即将过期。我发现这个教程很不错。它开始工作,但在完成之前停止打印脚本中的调试消息

我的PHP代码:

<?php

$param1 = '"romAudit"';
$param2 = '"Nintendo Entertainment System"';
$param3 = "third";

$command = "python scripts/arcade_functions.py";
$command .= " $param1 $param2";

 header('Content-Type: text/html; charset=utf-8');
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
echo "<style type='text/css'>
 body{
 background:#000;
 color: #7FFF00;
 font-family:'Lucida Console',sans-serif !important;
 font-size: 12px;
 }
 </style>";



$pid = popen( $command,"r");

echo "<body><pre>";
while( !feof( $pid ) )
{
 echo fread($pid, 256);
 flush();
 ob_flush();
 echo "<script>window.scrollTo(0,99999);</script>";
 usleep(100000);
}
pclose($pid);

echo "</pre><script>window.scrollTo(0,99999);</script>";
echo "<br /><br />Script Complete<br /><br />";
?>
我认为在脚本完成之前,有一些计时器或其他东西正在杀死它。在windows命令提示符下完成大约需要2.5秒

我知道脚本没有在PHP之外完成,因为我在python函数的末尾创建了一个日志文件并将所有内容写入

Python脚本(我还在学习,我删除了一些不适用于字符限制的其他函数):

PHP输出(从Chrome浏览器复制):


你能发布Python脚本吗?还有php输出吗?你的脚本可能无法访问ROM路径,所以什么也不返回吗?@Steve,我不认为脚本是问题所在,因为它在Windows命令提示符下使用相同的参数工作。对不起,我只是说您的php localhost是否具有与Windows命令提示符相同的文件夹访问权限?
C:\Arcade\www\scripts>python arcade_functions.py "romAudit" "Nintendo Entertainment System"
Arguments passed: romAudit Nintendo Entertainment System
Executing audit of Nintendo Entertainment System now

Extracting system XML database ...
Extraction Complete.

Creating a list of the files in the directory of ROM Path...
Directory Listing Complete

Determining which ROMs match the XML database ...
Found Directory: _Not In Database , Sub-Directories will not be audited
Matching Complete

Attempting to create "_Not In Database" directory
ERROR directory Y:\ROMS\Nintendo Entertainment System\_Not In Database, exists

Moving unmatched ROMs to "_Not In Database" directory ...
Moving complete, check Y:\ROMS\Nintendo Entertainment System\_Not In Database for un-matched ROMs

found 791 out of 791 ROMs

C:\Arcade\www\scripts>
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Script Python Example

from xml.dom import minidom
import xml.etree.cElementTree as ET
import os, re, shutil, sys

'''
    Create the Log Files directories first by uncommenting the "createLogDirs()", only run this once
    Set all paths in the path sections below
'''

rlPath = 'C:\\Arcade\\RocketLauncher\\' #set your RocketLauncher Path here
hsPath = 'C:\\Arcade\\FrontEnds\\HyperSpin\\' #set your HyperSpin Path here
romPath = 'Y:\\ROMS\\'  #set your ROM Path here
downloadPath = "C:\\Users\\Ben\\Downloads\\EmuMovies\\" #EmuMovies Download Path
logFiles = 'C:\\Arcade\\Logs\\' #Where to create and put the log files

param1 = sys.argv[1]
param2 = sys.argv[2]

print('Arguments passed:', param1, param2)


def databaseGameExtraction(xml):
    print('Extracting system XML database ...')
    xmldoc = minidom.parse(xml)
    systemName = [xmldoc.getElementsByTagName('listname')[0].childNodes[0].data]
    games = xmldoc.getElementsByTagName('game')
    roms = []
    for game in games:
        romKey = game.attributes['name']
        roms.append(romKey.value)
    print('Extraction Complete.',"\n")
    return roms, systemName

def romsAvailable(path):
    print('Creating a list of the files in the directory of ROM Path...')
    romsList = os.listdir(path)
    print('Directory Listing Complete',"\n")
    return romsList

def romAudit(system):
    print('Executing ROM audit of', system, 'now', '\n')
    xmlToAudit = hsPath + 'Databases' + '\\' + system + '\\' + system + '.xml'
    if os.path.isfile(xmlToAudit):
        roms, systemName = databaseGameExtraction(xmlToAudit)
        romsList = romsAvailable(romPath + system)
        output = []
        print('Determining which ROMs match the XML database ...')
        for newList in romsList:
            if os.path.isdir(romPath + system + '\\' + newList):
                print('Found Directory:', newList, ', Sub-Directories will not be audited')
            else:
                newRoms = os.path.splitext(newList)
                output.append(newRoms)
        inDatabase = []
        notInDatabase = []
        for value in output:
            if value[0] in roms:
                inDatabase.append(value)
            else:
                notInDatabase.append(value)
        print('Matching Complete', "\n")
        notInDatabasePath = romPath + system + '\\' + '_Not In Database'
        print('Attempting to create "_Not In Database" directory')
        try:
            os.makedirs(notInDatabasePath)
        except:
            print('ERROR directory ' + notInDatabasePath + ', exists \n')
        print('Moving unmatched ROMs to "_Not In Database" directory ...')
        for extra in notInDatabase:  # Moves the ROMs that are not in the database
            dst = notInDatabasePath + '\\' + extra[0] + extra[1]
            src = romPath + system + '\\' + extra[0] + extra[1]
            try:
                # print(src)
                # print(dst)
                shutil.move(src, dst)
            except:
                errorMessage = 'error copying ' + '"' + extra[0] + extra[1] + '"' + '\n'
                file = open(logFiles + system + ' romAuditError.txt', 'a')
                errorlog = errorMessage
                file.write(errorlog)
                file.close()
        print('Moving complete, check', notInDatabasePath, 'for un-matched ROMs', "\n")
        print('found ' + str(len(inDatabase)) + ' out of ' + str(len(roms)) + ' ROMs')
    else:
        print('error' + system + 'not a valid XML File')

    if os.path.isfile(logFiles + 'Have\\' + system + ' ROM have.txt'):
        os.remove(logFiles + 'Have\\' + system + ' ROM have.txt')
    if os.path.isfile(logFiles + 'Missing\\' + system + ' ROM missing.txt'):
        os.remove(logFiles + 'Missing\\' + system + ' ROM missing.txt')
    have = []
    for game in inDatabase:
        rom = game[0] + '\n'
        have.append(game[0])
        file = open(logFiles + 'Have\\' + system + ' ROM have.txt', 'a')
        file.write(rom)
        file.close()
    missing = []
    for rom in roms:
        if rom not in have:
            missing.append(rom)
            print(rom, "NOT found")
    for miss in missing:
        output = miss + '\n'
        file = open(logFiles + 'Missing\\' + system + ' ROM missing.txt', 'a')
        file.write(output)
        file.close()



if param1 == 'romAudit':
    romAudit(param2)
else:
    print(param1, 'or', param2, 'is not valid')
Arguments passed: romAudit Nintendo Entertainment System
Executing ROM audit of Nintendo Entertainment System now 

Extracting system XML database ...
Extraction Complete. 

Creating a list of the files in the directory of ROM Path...


Script Complete