質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

12496閲覧

VB.NETからPython呼び出しについて

Goga

総合スコア9

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2020/05/14 14:55

実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CPython3をインストールしたことはないのですが、CPython3の実行時には、コマンドラインで以下のpythonPath変数の内容がすべて必要なのでしょうか?

VB

1'Pythonインタプリタパス 2 Dim pythonPath As String = "C:\ProgramData\Microsoft\VisualStudio\Packages\CPython3.Exe.x64,version=3.7.5,chip=x64"

実際は、"C:\ProgramData\Microsoft\VisualStudio\Packages\CPython3.Exe"までなんじゃないかなと思うのですが、どうでしょう。
("CPython3.Exe"ファイルが"C:\ProgramData\Microsoft\VisualStudio\Packages"フォルダに存在しなければならないことは言うまでもありません。)

投稿2020/05/19 05:38

編集2020/05/19 05:40
kenshirou

総合スコア772

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Goga

2020/08/10 03:48

Anaconda3をインストールして Dim pythonPath As String = "C:\ProgramData\Anaconda3\python.exe" とする事で解決しました。アドバイスありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問