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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

1679閲覧

C#で外部ライブラリを含むpythonファイルを実行したい

shun_uchi

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

1クリップ

投稿2019/03/04 07:03

編集2019/03/04 13:36

前提・実現したいこと

Visual Studio 2017のWFPでGUIを作っています。その際にbuttonからpythonの外部ライブラリ(numpyやmatplotlibなど)を含む.pyファイルを実行したいです。

 現状としてはデバッグするとButtonが表示されたGUIは適切に立ち上がり、C#で書いたShow()関数では文字を表示できました。
しかしpythonファイルを実行しようとすると表示されたButtonをクリックしてもpythonファイルが実行されていません。どなたか解決策に関する知見をお持ちではございませんでしょうか?

私の開発環境は以下の通りです。
・Visual Studio2017,
・C#,
・python3.6.8

※参考にしているサイトは以下の通りです。
Windows GUIプログラミング入門1 メッセージボックス表示
第7回 Windowsフォームアプリケーションからパペロを制御してみた

該当のソースコード

メインとなるC#のファイルMainWindow.xaml.csがこちら

C#

1using System; 2using System.Collections.Generic; 3using System.Diagnostics; 4using System.Linq; 5using System.Text; 6using System.Threading.Tasks; 7using System.Windows; 8using System.Windows.Controls; 9using System.Windows.Data; 10using System.Windows.Documents; 11using System.Windows.Input; 12using System.Windows.Media; 13using System.Windows.Media.Imaging; 14using System.Windows.Navigation; 15using System.Windows.Shapes; 16 17namespace python_in_cc 18{ 19 /// <summary> 20 /// MainWindow.xaml の相互作用ロジック 21 /// </summary> 22 public partial class MainWindow : Window 23 { 24 public MainWindow() 25 { 26 InitializeComponent(); 27 } 28 29 private void Button_Click(object sender, RoutedEventArgs e) 30 { 31 var p = new Process(); //プロセスクラスのインスタンスを生成 32 33 p.StartInfo.FileName = @"C:\(ファイルのディレクトリ)\python.exe"; //python.exeの場所を指定 34 p.StartInfo.UseShellExecute = false; //シェルで実行を無効 35 p.StartInfo.CreateNoWindow = true; //Windowを開かないように設定 36 37 //引数にPythonスクリプトを指定 38 p.StartInfo.Arguments = @"C:\(ファイルのディレクトリ)\calc.py"; 39 40 p.Start(); //プロセスの実行 41 42 p.WaitForExit(); //プロセスの終了まで待機 43 p.Close(); //プロセスを終了 44 } 45 } 46 47}

そして、外部ライブラリを含むpythonファイルcalc.pyがこちら

py

1#!/usr/bin/env python 2# coding: utf-8 3 4import matplotlib.pylab as p 5from mpl_toolkits.mplot3d import Axes3D 6from numpy import* 7 8print("Initialinzation") 9Nmax=100;Niter=50;V=zeros((Nmax,Nmax),float);d=10;a=45;xedge=10;t=10;r=pi 10 11print("Working hard,wait for the figure while I count to 60") 12for k in range(xedge,Nmax-xedge): 13 for l in range(a,a+t): 14 V[k,l]=-100 15 for l in range(a+d,a+d+t): 16 V[k,l]=100 17 18for iter in range(Niter): 19 if iter%10 == 0:print(iter) 20 for i in range(1,Nmax-2): 21 for j in range(1,a-1): 22 V[i,j]=0.25*(V[i+1,j]+V[i-1,j]+V[i,j+1]+V[i,j-1]) 23 for j in range(a+t+1,a+d-1): 24 V[i,j]=0.25*(V[i+1,j]+V[i-1,j]+V[i,j+1]+V[i,j-1]) 25 for j in range(a+d+t+1,Nmax-2): 26 V[i,j]=0.25*(V[i+1,j]+V[i-1,j]+V[i,j+1]+V[i,j-1]) 27x=range(0,Nmax,2);y=range(0,Nmax,2) 28X,Y=p.meshgrid(x,y) 29 30def functz(V): 31 z=V[X,Y] 32 return z 33 34Z=functz(V) 35fig=p.figure() 36ax=Axes3D(fig) 37ax.plot_wireframe(X,Y,Z,color="b") 38ax.set_xlabel("X") 39ax.set_ylabel("Y") 40ax.set_zlabel("Potential") 41ax.set_title('Potential of capacita') 42p.show() 43 44print(V[50,a]) 45print(V[50,a+5]) 46print(V[50,a+t]) 47print(V[50,a+d]) 48print(V[50,a+d+5]) 49print(V[50,a+d+t])

試したこと

どなたかお力添えのほう宜しくお願い致します。

###後記
解決しました、皆様ご指南の方大変ありがとうございました。
結果1
結果2

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

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

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

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

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

Q71

2019/03/04 08:30

質問文が二重になっています。整理してください。 Cドライブ直下にpython.exeがあるのですか?usersディレクトリ直下にもファイルは置けないと思います。そのあたり、正しいファイル位置を設定していると思っていいですか? 結果が表示されないというのは、matplotのウィンドウですか?
shun_uchi

2019/03/04 09:09

申し訳ございません。 C:直下にあるわけではなく途中のディレクトリを表示していなかっただけです。 結果についてはおっしゃるように、結果が表示されない=matplotのウインドウが表示されないということです。
guest

回答2

0

ベストアンサー

p.StartInfo.CreateNoWindow = true; //Windowを開かないように設定

開かない設定なので開く訳ないと思うのですが、他にエラーが出るなら追記してください。
また外部ライブラリを使わない場合など、表示できる場合があるなら追記してください。

投稿2019/03/04 07:15

Zuishin

総合スコア28660

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

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

shun_uchi

2019/03/04 09:06

ご指摘ありがとうございます。 ご指摘の箇所と一行上の p.StartInfo.UseShellExecute = false; //シェルで実行を無効 については参考にしたサイトを基に考えて設定をいろいろ変えてみましたが結果に違いは出てきませんでした。 また、外部ライブラリを使わない場合に.pyファイルを実行してみましたが同様に結果は表示されませんでした。 エラーが出るというよりもbuttonを押しても何も起こらないといった状況です。
Zuishin

2019/03/04 09:26

new Process() にブレークポイントを置いて実行し、止まったところで F11 で 1 行ずつ実行してみてください。 その際のスクリプトは何か文字を表示してキー入力を待つものにし、python.exe とスクリプトへのパスが正しいことを確認してください。それとウィンドウは表示する設定にしてください。
Zuishin

2019/03/04 09:32

またブレークポイントで止まらなかった場合は XAML を見せてください。
shun_uchi

2019/03/04 12:41

ご指南大変ありがとうございます。ブレークポイントを置いてみましたが止まりませんでした。(すみません、私もC#は初心者で調べながら実行してみました) 後、xamlを記載することを忘れておりました。申し訳ございません。以下MainWindow.xamlです。 <Window x:Class="python_in_cc.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:python_in_cc" mc:Ignorable="d" Title="python in c#" Height="450" Width="800"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="37*"/> <ColumnDefinition Width="756*"/> </Grid.ColumnDefinitions> <Button Content="execute python" Grid.Column="1" HorizontalAlignment="Left" Margin="119,82,0,0" VerticalAlignment="Top" Width="264" Height="172" FontSize="24"/> </Grid> </Window> すみません、よろしくお願いします。
Zuishin

2019/03/04 12:52

クリックイベントが入ってませんね。 <Button Click="Button_Click" Content="execute python" Grid.Column="1" HorizontalAlignment="Left" Margin="119,82,0,0" VerticalAlignment="Top" Width="264" Height="172" FontSize="24"/>
guest

0

C#

1var psInfo = new ProcessStartInfo(); 2psInfo.CreateNoWindow = true; 3psInfo.UseShellExecute = false; 4psInfo.FileName = "test.bat"; 5var p = Process.Start(psInfo);

bat

1@echo off 2start /wait "" perl test.pl

perl

1use strict; 2 3print "Hello, World\n"; 4sleep; 5print ""; 6

バッチファイル(or cmd.exe)経由で呼び出すと良いかもしれません。

投稿2019/03/04 12:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

shun_uchi

2019/03/04 13:40

ご連絡ありがとうございます。 私は実はPerlを使ったことがありません。申し訳ございません。 しかし、今後C++でコードした.exeファイルを導入することも考えておりますので参考にさせていただきます。 ご指南ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問