问题
I want to create a WebJob in C#. Unfortunately, I need to use a Python 3 script as there is currently no suitable library for 1 particular task that I need to perform, using C#.
For example, see this answer/example.
Is it possible to have my WebJob call a Python script? I can place the Python3 script in a blob container - would I then be able to call and execute it from my C# WebJob?
回答1:
Sure, it's possible to call a Python 3 script via C# WebJob that follow the sample you linked. First of all, you need to install a Python 3 runtime as below.
- Access the kudu tool via the url
https://<your webapp name>.scm.azurewebsites.net
, and follow the figure below to install a Python 3 runtime. - For example to install
Python 3.5.2 x86
, it will be installed in the pathD:\home\Python35
, then you just need to change the Python execute file path in the sample to try to run it.
Hope it helps.
Update: Install pip
tool & other Python packages.
- Access the url
https://<your azure webapp name>.scm.azurewebsites.net/DebugConsole
. Commands as below.
D:\home>cd Python35 D:\home\Python35>curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1558k 100 1558k 0 0 6829k 0 --:--:-- --:--:-- --:--:-- 7179k D:\home\Python35>python get-pip.py Requirement already up-to-date: pip in d:\home\python35\lib\site-packages Collecting wheel Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB) Installing collected packages: wheel Successfully installed wheel-0.29.0
For example, install
numpy
packageD:\home\Python35>python get-pip.py numpy Collecting numpy Downloading numpy-1.13.1-cp35-none-win32.whl (6.8MB) Installing collected packages: numpy Successfully installed numpy-1.13.1
回答2:
Don't know if it is the best approach but this is what I did in the past:
Create a python webjob (manual, triggered) (see tutorial)
Create a C# webjob.
Trigger the Python job from the C# job:
using (var client = new HttpClient()) { var username = "jobusername"; var password = "jobpassword"; var byteArray = Encoding.ASCII.GetBytes($"{username}:{password}"); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); var response = await client.PostAsync("joburl", null); }
You can find the job credentials from the job properties on azure portal:
来源:https://stackoverflow.com/questions/45008688/in-azure-can-i-call-a-python-script-from-my-c-sharp-webjob