Итак, я пишу программу на c #, но я довольно плохо знаком с языком, поэтому я повторно использую скрипт на python, который я создал давно.Он отлично работает как в командной строке, так и в режиме ожидания, против кода и в Linux, но в приложении c # у меня есть статический метод, который запускает веб-сканер python и возвращает ошибку, если она есть, и вывод сценариев в другом месте.Но когда я пытаюсь запустить скрипт python в приложении c #, файл python завершается ошибкой с
C:\Python\Python37\python.exe: can't find 'main' module in 'C:\Users\me\source\repos\myapp\myapp\bin\Debug'.
Веб-сканер выглядит следующим образом
import sys
from bs4 import BeautifulSoup as Soup
from urllib.request import Request as Req, urlopen as uOpen
from urllib.parse import quote
from random import randint as random
def search(query, index):
query = query.strip()
searchquery = query.replace(' ', '+')
request = Req(f'https://www.google.co.uk/search?q={searchquery}&tbm=isch', headers={'User-Agent':'Mozilla/5.0'})
client = uOpen(request)
soup = Soup(client.read(), 'html.parser')
client.close()
images = [image['src'] for image in soup.findAll(f'img', {'alt':f'Image result for {query}'})]
if len(images) < 1:
raise IndexError('didnt find any images')
if index == None:
return images[random(0, len(images) - 1)]
return images[index]
args = sys.argv[1:]
query = ' '.join(args[0:-1])
index = args[-1]
imageURL = search(query, int(index))
print(imageURL)
Напомним, что он работает нормально, когдаиспользуется в cmd, idle, vs code и linux.Что касается стороны c #, то это выглядит так.
public static string RunPythonScript(string FileName, string[] args)
{
ProcessStartInfo StartInfo = new ProcessStartInfo();
StartInfo.FileName = "C:\\Python\\Python37\\python.exe";
StartInfo.Arguments = String.Format("{0} {1}", FileName, string.Join(" " , args));
StartInfo.UseShellExecute = false;
StartInfo.CreateNoWindow = true;
StartInfo.RedirectStandardError = true;
StartInfo.RedirectStandardOutput = true;
using (Process Execution = Process.Start(StartInfo))
{
using (StreamReader Reader = Execution.StandardOutput)
{
string StdError = Execution.StandardError.ReadToEnd();
if (!(StdError == null || StdError == ""))
return StdError;
string Result = Reader.ReadToEnd();
return Result;
}
}
}