在IIS中运行Python脚本

在IIS中运行Python脚本,python,iis,flask,Python,Iis,Flask,我正在尝试在flask web应用程序中运行python脚本。基本上,用户可以单击按钮,脚本应该在托管我的flask python web应用程序的服务器上运行。我在Windows Server 2016和IIS上托管它,我应该考虑Linux 当用户单击按钮时,服务器使用os.system函数执行以下脚本,该函数配置如下 def run_python_script(script_path_and_arguments): try: command = 'pytho

我正在尝试在flask web应用程序中运行python脚本。基本上,用户可以单击按钮,脚本应该在托管我的flask python web应用程序的服务器上运行。我在Windows Server 2016和IIS上托管它,我应该考虑Linux

当用户单击按钮时,服务器使用os.system函数执行以下脚本,该函数配置如下

def run_python_script(script_path_and_arguments):    
    try:
        command = 'python {}'.format(script_path_and_arguments)
        system(command)
        return True, 'Success'
    except Exception as e:
        logger.error('Failed to run script, exception: {}'.format(e))
        return False, 'Unknown Error'
当我在工作站上本地运行脚本时,它执行正常。 当我从服务器运行脚本时,从命令行,它运行正常, 当我尝试在网站上运行它时,单击按钮失败

在我看来,当它在IIS下运行时,一定存在一些权限/安全问题。你知道我应该在哪里解决这个问题吗

在服务器上,python.exe位于c:\Anaconda3中\

编辑:我现在尝试通过运行带有子流程模块的脚本来捕获输出:它给出了一个简单的异常命令“python…”返回非零退出状态1

def run_python_script(tscript_path_and_arguments):
    try:
        command = 'python {}'.format(script_path_and_arguments) 
        output_bytes = subprocess.check_output(command, stderr=subprocess.STDOUT)
        output = output_bytes.decode('utf-8')
        lines = output.split('\n')
        for line in lines:
            logger.info(msg='Script output =  {}'.format(line))
        return True, 'Success'
    except Exception as e:
        logger.error('Failed to run script, exception: {}'.format(e))
        return False, 'Unknown Error'

原来flask应用程序使用的不是pythonpath系统环境变量,而是在fastcgi设置中配置的环境变量:

为什么要使用python命令行调用python?为什么不直接将您需要的模块或脚本导入flask应用程序并从那里调用它们呢?这似乎比让用户在命令行中运行python更安全。@Joost老实说,这是因为脚本是另一个项目的一部分,我当然可以这样做。在实现时,这似乎是正确的做法。在一些测试和代码剥离之后,因为一个普通的hello world脚本运行正常,结果表明问题在于正在执行的脚本的导入。我有一些脚本正在导入的模块,但它们在PYTHONPATH中。当我运行上面演示的脚本时,是否没有考虑PYTHONPATH?当我剥离这些进口的脚本时,它运行了OK.BTW,基于微软方面最近的变化,在不久的将来,它将是一个必须搬到Linux,而不仅仅是我应该考虑Linux。