简体   繁体   English

从 Azure WebJob 运行 Python 脚本

[英]Running Python script from Azure WebJob

I'm trying to run python script from Azure webjob.我正在尝试从 Azure webjob 运行 python 脚本。 This is what I've done following this link这是我按照此链接所做的

  1. Access the kudu tool via the url https://<webapp name>.scm.azurewebsites.net and installed Python 364x86 via Site Extensions tab通过 url https://<webapp name>.scm.azurewebsites.net访问 kudu 工具并通过站点扩展选项卡安装Python 364x86
  2. Confirmed Python 364x86 is installed in the following path: D:\\home\\python364x86确认Python 364x86安装在以下路径: D:\\home\\python364x86
  3. Added my script trading.py in D:\\home\\python364x86加入我的脚本trading.pyD:\\home\\python364x86
  4. Created run.bat file with this line of code D:\\home\\python364x86\\python.exe trading.py用这行代码创建了run.bat文件D:\\home\\python364x86\\python.exe trading.py
  5. Included run.bat and trading.py in the webjob zip file包括run.battrading.py在webjob zip文件
  6. Deployed, but getting error已部署,但出现错误
[09/07/2019 07:02:00 > 0dd02c: SYS INFO] Status changed to Initializing
[09/07/2019 07:02:00 > 0dd02c: SYS INFO] Run script 'run.bat' with script host - 'WindowsScriptHost'
[09/07/2019 07:02:00 > 0dd02c: SYS INFO] Status changed to Running
[09/07/2019 07:02:00 > 0dd02c: ERR ] The filename, directory name, or volume label syntax is incorrect.
[09/07/2019 07:02:00 > 0dd02c: INFO] 
[09/07/2019 07:02:00 > 0dd02c: INFO] D:\local\Temp\jobs\triggered\z\2az54ret.wh4>D:\home\python364x86\python.exe trading.py 
[09/07/2019 07:02:00 > 0dd02c: SYS INFO] Status changed to Failed
[09/07/2019 07:02:00 > 0dd02c: SYS ERR ] Job failed due to exit code 1

Functions.cs函数.cs

public void StartTheBot()
        {        
            // Local   
            //var fileName = @"C:\Users\robert\AppData\Local\Programs\Python\Python37-32\python.exe";
            //var script = @"C:\python-scripts\trading.py";

            // Production
            var fileName = @"D:\home\python364x86\python.exe";
            var script = @"D:\home\python364x86\trading.py";
            var errors = "";
            var results = "";        

            ProcessStartInfo psi = new ProcessStartInfo
            {
                FileName = fileName,
                Arguments = script,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                CreateNoWindow = true
            };            

            using (Process process = Process.Start(psi))
            {
                errors = process.StandardError.ReadToEnd();
                results = process.StandardOutput.ReadToEnd();               
            }

            Console.WriteLine("Errors:");
            Console.WriteLine(errors);
            Console.WriteLine();
            Console.WriteLine("Results:");
            Console.WriteLine(results);
        }

Above code executes python script.上面的代码执行python脚本。 It works locally , but once I deploy it to production it fails.它可以在本地工作,但是一旦我将它部署到生产环境,它就会失败。 Tried so many times, spent plethora of hours, but still unsure why prod doesn't work.尝试了很多次,花了很多时间,但仍然不确定为什么 prod 不起作用。 Help is appreciated.帮助表示赞赏。

trading.py交易.py

import telegram

my_token = 'mytoken'
bot = telegram.Bot(token = my_token)

chat_id = 'mychatid'
message = 'Hello
bot.sendMessage(chat_id=chat_id, text=message)

I tried to realize your needs with Python in WebJob and successfully make it works.我尝试在 WebJob 中使用 Python 实现您的需求并成功使其工作。

Here is my steps and sample code.这是我的步骤和示例代码。 My local environment is Python 3.7 on Windows 10.我的本地环境是 Windows 10 上的 Python 3.7。

  1. Create a Python virtual environment and install python-telegram-bot package via commands as below.创建一个 Python 虚拟环境并通过如下命令安装python-telegram-bot包。

     $ mkdir telegram-webjob $ virtualenv telegram-webjob $ cd telegram-webjob $ Scripts\\active $ pip install python-telegram-bot $ pip freeze

    在此处输入图片说明

  2. I changed your code as my sample code, then run it works fine on local, as below.我将您的代码更改为我的示例代码,然后在本地运行它可以正常工作,如下所示。

     import telegram from datetime import datetime as dt my_token = '<my token>' bot = telegram.Bot(token = my_token) chat_id = '<chat id>' message = f"Hello at {dt.now()}" bot.sendMessage(chat_id=chat_id, text=message)

    在此处输入图片说明

    在此处输入图片说明

  3. I created a new directoy named webjob and copy my trading.py file and all directories with their files into it, as below.我创建了一个新的名为directoy webjob和复制我trading.py文件,并与他们的文件到它的所有目录,如下图所示。

    在此处输入图片说明

  4. Write the startup bat script named run.bat , the code as below.编写名为run.bat的启动 bat 脚本,代码如下。

     D:\\home\\python364x86\\python.exe trading.py

    The D:\\home\\python364x86\\python.exe path is the python364x86 site extension installed path as the figure below. D:\\home\\python364x86\\python.exe路径为python364x86站点扩展安装路径,如下图。

    在此处输入图片说明

  5. Then, I packaged the all directories and files in the webjob directory as a zip file, as below.然后,我将webjob目录下的所有目录和文件打包成zip文件,如下。

    在此处输入图片说明

  6. I uploaded it to Azure WebApp as a webjob, as the figure below, and start it.我把它作为webjob上传到Azure WebApp,如下图,并启动它。

    在此处输入图片说明

    在此处输入图片说明

Finally, it works fine for me and I can see the message interval 10 sec displayed in my telegram client.最后,它对我来说很好用,我可以看到电报客户端中显示的消息间隔为 10 秒。

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM