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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Python

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

Q&A

解決済

3回答

1106閲覧

cとPython動かし方

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Python

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

0グッド

1クリップ

投稿2022/10/28 00:58

編集2022/10/28 07:17

リナックスの環境で開発を勧めております。
主にC言語でプログラム書いていてコンパイルまではできたのですが、実行してもプログラム上で指定しているPythonが呼び出されません。
cのプログラムを実行してる中でPythonのプログラムも呼び出して実行するやり方をご教師お願いします。

c言語のプログラム

void abc(int); int main(void) {省略} void abc() { char passbuf1[] ="Python main.py"; system(passbuf1); }

コンパイルの仕方は

`gcc -fPIC main.c `python3-config --cflags --ldflags`

実行のコマンドは

` sudo ./main

実行結果を見ると

main.py: not found

と表示されます。

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

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

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

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

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

melian

2022/10/28 01:26

$ gcc -fPIC main.c `python3-config --cflags --ldflags` この通りにコンパイルしてエラーが発生せずに正常終了したのであれば、 $ sudo ./a.out でしょう。こうしても、まだ Python スクリプトは動作しないでしょうけれども。
退会済みユーザー

退会済みユーザー

2022/10/28 01:55

sudo ./a.out で実行してもコマンドが見つからないと出てきます
BeatStar

2022/10/28 01:57 編集

自分の都合だけしか見ないタイプでしょうか? Markdownを使えと言っているのですが…。 Markdownを使わないと他のユーザからすると読みづらいです。 まあこ \nたえをあ \n げて も い               い け                              ど ど      お  し                       まし ょ か ?
melian

2022/10/28 02:00

> sudo ./a.out で実行してもコマンドが見つからないと出てきます ええ、まぁ、コンパイルは、成功している、のでしょう。。。関数名に、問題が、あります、ね。
退会済みユーザー

退会済みユーザー

2022/10/28 02:01

お願いします!
退会済みユーザー

退会済みユーザー

2022/10/28 02:03

例えばvoid moter(int host)ということでしょうか?
BeatStar

2022/10/28 02:04

> お願いします! の前にやることありますよね? Markdownを使いましょう。 ヒントとしてリンク先を三つほど提示しましたが、お読みになりましたか? 少なくとも『ヒント1』でわかると思いますが。 ご自分の質問をお読みになってください。
退会済みユーザー

退会済みユーザー

2022/10/28 02:13

なおしてみました
otn

2022/10/28 02:25

そもそも、「Hello world と表示するだけ」みたいな簡単なプログラムを、書いて、コンパイルして、実行した事があるのでしょうか?
退会済みユーザー

退会済みユーザー

2022/10/28 02:26

あります。
otn

2022/10/28 02:49 編集

> あります。 それで、 > 実行のコマンドは > sudo ./main.c ということは、そのときのことをすっかり忘れてしまったんでしょうか。思い出して、そこからやり直してみましょう。
退会済みユーザー

退会済みユーザー

2022/10/28 02:32

すみません質問の方にも.cいれてました。 sudo ./mainそれでもできないです。
BeatStar

2022/10/28 02:47

回答した後に確認すると質問本文を修正されているようですが、『現在のコードではどうなるのか』も書いた方がいいです。もしかしたらOSの設定によるものかもしれないし、もしかしたらそれ以外の環境かもしれないし、もしかしたらコードの問題かもしれないし。
otn

2022/10/28 02:56 編集

> CもPythonも単独で実行するとプログラムは動きます。 で書いている、「動いた」と言っているそのときの、下記について書いてください。 ・Cのプログラム内容 ・Cプログラムをコンパイルしたときのコマンド ・Cプログラムを実行したときのコマンド ・Pythonプログラムを実行したときのコマンド 記憶に基づいて今書くのでなく、確実に実行できた端末からのコピペで。
退会済みユーザー

退会済みユーザー

2022/10/28 02:59

皆様ありがとうございます。 今また修正をかけてみます
退会済みユーザー

退会済みユーザー

2022/10/28 03:17

またあげ直します
BeatStar

2022/10/28 03:17

> main.py: not found エラーメッセージとしては「main.pyってのは無いぞー」みたいなものです。 カレントディレクトリ(現在位置)にmain.pyはありますか?
退会済みユーザー

退会済みユーザー

2022/10/28 04:17

ディレクトリを分けていたので同じところに収納したのですが、main.py: not foundとでてきます
guest

回答3

0

system("python c:¥¥test¥¥main.py");
のようにフルパスを指定すればいいと思います。

投稿2022/10/28 02:52

編集2022/10/28 02:54
jmdajmw

総合スコア302

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

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

退会済みユーザー

退会済みユーザー

2022/10/28 04:18

指定したのですがmain.py: not foundと出てきます
jmdajmw

2022/10/28 04:53

本当にあるフォルダのフルパスを指定しましたか?
退会済みユーザー

退会済みユーザー

2022/10/28 05:05

ウィンドウズとかですとフルパスが簡単に出てくるのですが、リナックスでフルパスを探すのにファイルのコマンドを使用して実行した結果main.pyとしかでてこなく、それががフルパスがあってるのかすら曖昧です
退会済みユーザー

退会済みユーザー

2022/10/28 05:43

python.hの絶対パスを調べて実行ファイルのフォルダに移動させればいいでしょうか?
jmdajmw

2022/10/28 05:46

違います
退会済みユーザー

退会済みユーザー

2022/10/28 05:56

main.pyのフルパスの調べ方でしょうか?
jmdajmw

2022/10/28 05:59

system("cd ディレクトリパス"); system("python main.py"); でもいいと思います。
退会済みユーザー

退会済みユーザー

2022/10/28 06:05

ありがとうございます。 それでもパイソンのプログラムが動いていないので悩んでおります
jmdajmw

2022/10/28 06:07

main.pyはどこにありましたか?
退会済みユーザー

退会済みユーザー

2022/10/28 06:16

同じディレクトリに移動したので/home/pi/test にあります
BeatStar

2022/10/28 06:19

> system("cd ディレクトリパス"); > system("python main.py"); > でもいいと思います。 横からですど、そのやり方ってできましたっけ? C言語のsystem関数にCDコマンドを渡してもsytem関数から抜けたら元の場所に戻っていたはずですが…。
BeatStar

2022/10/28 06:23

後、質問者さんの環境はLinuxのようなのでパスの書き方も違いますね。
jmdajmw

2022/10/28 06:28

じゃあこれは? system("Python /home/pi/test/main.py");
退会済みユーザー

退会済みユーザー

2022/10/28 07:01

動きません。。。
jmdajmw

2022/10/28 07:02

エラーメッセージは?
退会済みユーザー

退会済みユーザー

2022/10/28 07:11

ないです。 すごい長いオプションをつけてコンパイルしなければならないことがわかりました。 ありがとうございました。
guest

0

.py ファイルというのは実行ファイルではありません。pythonのスクリプトファイルです

投稿2022/10/28 01:19

y_waiwai

総合スコア87784

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

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

退会済みユーザー

退会済みユーザー

2022/10/28 01:36 編集

回答ありがとうございます。 char passbuf1[] ="ここに"実行ファイルを指定するということでしょうか? それかまず、 Pythonでパスを取得するということでしょか?
y_waiwai

2022/10/28 01:36

ターミナル上でそのファイルをどうやって実行しているのか、を思い出してください "python main.py" とかそんな感じになると思います #あなたのその環境により変わってきますが
退会済みユーザー

退会済みユーザー

2022/10/28 01:59

ありがとうございます。 修正してやってみたのですがmain.py: not found と出てきます。
guest

0

ベストアンサー

まず、Pythonの場合とC言語の場合の動かし方は違います

C言語の場合はWindows上や*nix系だと$ main.exe 1 2 3のように起動しますがPyhtonの場合は
$ Python.exe main.py 1 2 3のように起動します。

bash

1# CygwinというWindowsに*nix系コマンドを使えるようにしたものの上で動かす場合 2 3# C言語で作成したプログラムmain.exeにコマンドライン引数{ 1, 2, 3 } を与えて起動 4$ main.exe 1 2 3 5 6# Pythonで作成したmain.pyにコマンドライン引数 { 1, 2, 3 } を渡して起動 7$ Python.exe main.py 1 2 3

ちなみに "$"は入力を促すアレです。

上記を比較してみてください。

自分が書いたコードは C言語だと main.exe、Pythonだとmain.pyですね。
で、それぞれの位置を考えてみてください。
Pythonの場合はPython.exeが付いていませんか?

C言語はコンパイラ(gccとか)が字句解析等を行い、機械語(machine language)に直接翻訳しています。
なので動かすときはOS側がそのmain.exeとかを読んで処理する。(プログラム名はその都度変わるけど)

Pythonの場合はインタプリタと言って、Python.exeが解釈しながら処理します。
OSがPython.exeを読んで処理。でもPython.exeは外部ファイルとしてmain.pyとかを読み込んで処理する。

イメージとしては、

C

1int main( void ){ 2 // 1. ファイル instruction.txt を読み込み、以下を処理する 3 // 1.1. 一行読み込んで 4 // 1.1.1. 字句解析し、処理する(例: メモリ上にデータを配置する、データを表示する etc.) 5}

のような感じでしょうか。
そういう風に解釈しながら処理していく。だからPython.exeが必要。

と言うことは、C言語では実際に処理しているのはmain.exeとかで、PythonではPython.exeですね。
つまりPythonでいうmain.pyのようなpyファイルは「単なるレシピ」でしかありません。

今回のコードを見ると、

C

1void abc() 2 { 3 4 char passbuf1[] ="main.py"; 5 6 system(passbuf1); 7 }

となっています。

実際にシミュレーションしてみると、system( "main.py" );となるはずです。

つまり、コマンドプロンプトとかターミナルとかで言えば$ main.pyとだけやっているようなものですね。

テキストファイルを動かそうとしているので動かない。

なのでsystem( "Python main.py" );みたいな文字列にならないと動かないと思います。
今のコードだと「main.cのようなソースコードで動かそうとしている」状態だと思いますよ。


[追記1]

手元にLinuxが無いので違うところがあるかもしれませんが。

Windows上だと C:\Users\(ユーザ名)\hamburger\cheeseburger\test1.txtのような感じですけど、
Linux系だと/home/(ユーザ名)/hamburger/cheeseburger/test1.txtみたいになっているようなので、

たとえば main.pyが /home/tekitounauser/pythonfilesにあるなら、
system( "Python /home/tekitounauser/pythonfiles/main.py" );としてみてはどうでしょうか?

(ああ回答完了して、後から見直したらすでに書かれていた…)

投稿2022/10/28 02:43

編集2022/10/28 06:31
BeatStar

総合スコア4958

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問