まず、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" );
としてみてはどうでしょうか?
(ああ回答完了して、後から見直したらすでに書かれていた…)