为什么Python 2.7 os.system(命令)有时会在Windows 8中递归,而os.startfile(命令)不会递归?

时间:2017-05-13 19:17:55

标签: python windows python-2.7 recursion

为什么Python 2.7 os.system(command)有时会在Windows 8中递归而os.startfile(command)没有递归?

我的命令是backup.bat,这是一个Windows批处理文件。

backup.bat的内容是:

"C:\Users\Frank Chang\Anaconda2\python.exe" -m animation_mini

@echo off
echo %time%
timeout 10 > NUL
echo %time%

我发现在animate时多次调用animation_mini.py中的Python 2.7 os.system函数的方式 用于在animate函数入口点的开头放置一个print语句,并在控制台中计算print语句。

我今天被告知Python 2.7 os.system(command)是C函数execve的包装器。但是这个事实并没有解释我用os.system('backup.bat')看到的递归。

os.system是从adder.cgi调用的,这是一个Python 2.7 CGI脚本,其代码行为:

#!C:\Users\Frank Chang\Anaconda2\python.exe
import cgitb
import cgi 
import os    
import signal
import threading , time
import sys
sys.path.insert(0,"C:\Users\Frank Chang\Documents\Arduino\mary\data\usr\lib\python2.7\dist-packages\HTMLgen")

import HTMLgen
import subprocess
import win32api
import pandas as pd

def main(): 


    form = cgi.FieldStorage()

    numStr1 = form.getfirst("input1", "0") 
    numStr2 = form.getfirst("input2", "0") 
    numStr3 = form.getfirst("input3", "0") 
    numStr4 = form.getfirst("input4", "0") 
    numStr5 = form.getfirst("input5", "0") 
    numStr6 = form.getfirst("input6", "0") 
    numStr7 = form.getfirst("input7", "0") 

    numStr8 = form.getfirst("input8", "0") 

    numStr9 = form.getfirst("input9", "0") 

    numStr10 = form.getfirst("input10", "0") 

    numStr11 = form.getfirst("input11", "0") 

    numStr12 = form.getfirst("input12", "0") 

    numStr13 = form.getfirst("input13", "0") 

    numStr14 = form.getfirst("input14", "0") 

    from pandas import ExcelWriter

    writer = ExcelWriter('PythonExport.xlsx')

    from pandas import DataFrame

    yourdf = DataFrame({'DC Start': numStr1, 'DC Duration': numStr2, 'Plant Start': numStr3, 'Plant Duration': numStr4,
'Supplier Start': numStr5, 'Supplier Duration': numStr6}, index=[0])
    yourdf.to_excel(writer,'Disruptions')

    yourdf = DataFrame({'FGI': numStr10, 'WIP': numStr11, 'DC': numStr12, 'Plant': numStr13,
'Supplier' : numStr14}, index=[0])
    yourdf.to_excel(writer,'Policy')

    writer.save()

    os.system('backup.bat')

def processInput(numStr1, numStr2):  
    '''Process input parameters and return the final page as a string.'''
    num1 = int(numStr1) # transform input to output data
    num2 = int(numStr2)
    total = num1+num2
    return str(total)

def fileToStr(fileName): 
    """Return a string containing the contents of the named file."""
    fin = open(fileName); 
    contents = fin.read();  
    fin.close() 
    return contents

main()

我的CGI脚本可能是os.system('backup.bat')递归的原因吗?

1 个答案:

答案 0 :(得分:0)

昨天,eryksun和Blckkngt都有正确的答案,将多个版本混合在一起导致递归噩梦。

INTERNAL ERROR的解决方案:无法在pyinstaller中创建临时目录,可以通过使用win32api.SetDllDirectory(..)并复制父进程的环境变量并添加键值对“TEMP”,“C”来更正:/ TMP“到词典

CGI脚本与我们的动画功能是否连续多次运行无关。