実現したいこと
Visual Basicで書かれたソフトにPythonで作成した関数の処理の結果を渡したいです。
まずは以下のサイトと同じ事をしたいです。
参考サイト
発生している問題
CallPythonClass.vbの
VisualBasic
1'プロセスを実行する。 2Dim ps = Process.Start(psi)
の箇所で、
System.ComponentModel.Win32Exception: 'アクセスが拒否されました。'
とうエラーが出ます。
今までPythonにしか触れたことがなく何をすればよいか検討がつきません。
アドバイスお願いします。
#コード
callTest.py
python
1import sys 2 3if len(sys.argv) == 4: 4 5 #引数を受け取る 6 param1 = int(sys.argv[1]) 7 param2 = int(sys.argv[2]) 8 param3 = int(sys.argv[3]) 9 10 #引数より計算処理を実施 11 calcVal = param1 + param2 + param3 12 13 #結果を返却 14 print("calcResult {0}".format(calcVal))
CallPythonClass.vb
VisualBasic
1Imports System 2Imports System.Collections.Generic 3Imports System.Linq 4Imports System.Diagnostics 5 6Public Class CallPythonClass 7 8 Public Sub New() 9 End Sub 10 11 Public Sub callExecute() 12 13 'Pythonインタプリタパス 14 Dim pythonPath As String = "C:\ProgramData\Microsoft\VisualStudio\Packages\CPython3.Exe.x64,version=3.7.5,chip=x64" 15 'Pythonスクリプトパス XXXXXはユーザー名 16 Dim pythonFilePath As String = "C:\Users\XXXXX\Desktop\GW\callTest.py" 17 18 '引数リストを作成する 19 Dim paramList = New ArrayList() 20 21 paramList.Add(pythonFilePath) 22 paramList.Add("1000") 23 paramList.Add("2000") 24 paramList.Add("2000") 25 26 'プロセス開始情報クラスを設定する。 27 '引数配列よりコマンド配列(空白繋ぎ)に変換し設定する 28 Dim psi = New ProcessStartInfo(pythonPath) With 29 { 30 .Arguments = String.Join(" ", paramList), 31 .RedirectStandardOutput = True, 32 .UseShellExecute = False 33 } 34 35 'プロセスを実行する。 36 Dim ps = Process.Start(psi) 37 38 '結果を取得する。 39 Dim calcResult = ps.StandardOutput.ReadToEnd() 40 41 'プロセス終了を待機する 42 ps.WaitForExit() 43 ps.Close() 44 45 '結果出力 46 Console.WriteLine(calcResult) 47 End Sub 48 49End Class
callFromTest.vb
VisualBasic
1Imports System 2 3Public Class callFromTest 4 5 Public Shared Sub Main(args As String()) 6 7 'Python呼び出しクラスをインスタンス化し処理する 8 Dim callPython = New CallPythonClass 9 10 'Pythonスクリプト外部呼出しを実行 11 callPython.callExecute() 12 End Sub 13End Class
#補足情報
Windows10 64bit
Visual Studio 2019
Python3.7.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/10 03:48