[英]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
这是我按照此链接所做的
https://<webapp name>.scm.azurewebsites.net
and installed Python 364x86
via Site Extensions tabhttps://<webapp name>.scm.azurewebsites.net
访问 kudu 工具并通过站点扩展选项卡安装Python 364x86
Python 364x86
is installed in the following path: D:\\home\\python364x86
Python 364x86
安装在以下路径: D:\\home\\python364x86
trading.py
in D:\\home\\python364x86
trading.py
在D:\\home\\python364x86
run.bat
file with this line of code D:\\home\\python364x86\\python.exe trading.py
run.bat
文件D:\\home\\python364x86\\python.exe trading.py
run.bat
and trading.py
in the webjob zip filerun.bat
和trading.py
在webjob zip文件[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。
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
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)
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
文件,并与他们的文件到它的所有目录,如下图所示。
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
站点扩展安装路径,如下图。
Then, I packaged the all directories and files in the webjob
directory as a zip file, as below.然后,我将
webjob
目录下的所有目录和文件打包成zip文件,如下。
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.