【问题标题】:Running python script infinitely on a server在服务器上无限运行 python 脚本
【发布时间】:2020-12-12 20:35:16
【问题描述】:

我正在构建一个需要在服务器上无限运行的 python 脚本。它将访问 Microsoft Exchange 服务器并阅读邮件、处理邮件并触发自动语音呼叫。

我已成功实施自动呼叫操作。目前该脚本在我的 PC 上运行。我有三个问题。

  1. 为了在服务器而不是 PC 上运行脚本,除了连接到服务器之外,代码的语法是否需要更改?我的意思是,我正在阅读邮件和触发呼叫的部分,是否需要更改?还是可以在服务器上运行相同的脚本?如果确实需要更改,有人可以附上需要做的更改。
  2. 由于我需要在服务器上运行脚本,并访问 Microsoft Exchange 服务器,该脚本是否可以在 Exchange 服务器本身上运行?如果是,请附上有用的资源。
  3. 脚本本身不接受任何输入,但它会访问一些需要不时手动编辑的文件。我应该如何做到这一点?

【问题讨论】:

    标签: python server exchange-server


    【解决方案1】:
    1. PC 和服务器之间的区别并不重要。您的脚本将需要一组资源,并且可能会对其运行的操作系统做出假设。这些才是最重要的。只要有所需的资源,它就应该运行良好。例如,如果您的脚本需要 Python 3.6+ 才能运行,那么您必须在服务器/PC 上安装 Python 3.6+。如果您使用的是特定的 python 包,那么应该安装它。如果您假设文件在磁盘上的位置,那么这些路径要么需要独立于操作系统,要么与服务器/PC 的操作系统匹配,并且这些文件需要在那里。但是python的语法不应该改变。

    如果您的目标是将 python 服务器作为服务器上的服务运行,则需要有关服务器类型(windows/linux)的更多信息。假设您正在考虑在交换服务器上运行它,我想您很可能希望在 Windows 上运行它。 This has been asked and answered here。关于您的代码,您需要确保您的脚本可以作为库处理,并且您不想在代码中调用sys.exit,而是应该依靠异常来传递错误。我喜欢的模式类似于

    def main(argv=None):
      # parse arguments if you have them and run the script
    
    if __name__ == '__main__':
      main()
    

    然后在您的服务中,您可以导入并调用main(...),而无需运行其他可执行文件。

    1. 见#1。它是否可以在该服务器上运行取决于那里是否有所有必需的资源和文件。可能存在您是否想在您的交换服务器上运行脚本的问题。该答案取决于脚本的负载、服务器的繁忙/活跃程度、是否要在服务器上安装额外的软件等。

    2. 您的最佳解决方案将取决于您的情况。如果您可以登录并编辑文件,那么也许您就是这样做的。如果您想在 PC 上编辑它们然后将它们向上推送,那么有解决方案。一切都取决于什么对您的项目/情况有意义。

    【讨论】:

    • 所以我应该将服务器视为任何普通机器,只有少数区别,因为它是服务器而不是个人电脑
    • 我的意思是,从根本上说,脚本并不重要,也不关心它是 PC 还是服务器。它只需要访问它期望在那里的任何资源/软件。我认为通常重要的是您在服务器上引入的负载。服务器还在运行什么?有多少用户连接到它提供的服务?服务器上是否有软件/管理限制?
    • 硬件也可能影响脚本的设计。如果这是一项可以分发的任务,您可能会决定重新设计应用程序以使用多处理和处理池,但这可能不是 PC 最有效的设计。但是这些差异是非常特定于领域/情况的。您想要的任务似乎本身并不是处理器密集型的。所以我希望你不会想要/不需要重新设计它以从 PC 迁移到服务器。
    • 明白了。另外,作为服务运行的代码与作为任何普通脚本运行的代码有什么区别?
    • Windows 服务要求它遵循特定的 API,我提供的链接中的第一个问题/答案很好地涵盖了。一旦你有了服务框架,你就可以调用你的脚本。我会更新我的答案,多谈谈这个。
    猜你喜欢
    • 2016-06-09
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多