ihit's diary

ちょっとしたメモに

pythonでLinuxコマンドを実行する

Linuxでlsとかmkdirがしたくてちょっと調べてみた.

色々方法はあるらしいがsubprocessを使うのが良さそうだった.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import subprocess

p0 = subprocess.check_call(['ls','-al'])
p1 = subprocess.check_call(['mkdir','test'])

ついでにC言語を実行できるか確かめてみた.

test.c

#include <stdio.h>

int main(void){
	int a;
	while(1){
		scanf("%d",&a);
		if(a == 0){
			return 0;
		}
		printf("%d\n",a);
	}
	return 0;
}

これを実行するには

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import subprocess

p0 = subprocess.check_call(['gcc','test.c','-o','test'])

p1 = subprocess.Popen(['./test'], stdout=subprocess.PIPE,stdin=subprocess.PIPE)
p2 = subprocess.Popen(['echo','-1'], stdin=subprocess.PIPE, stdout=p1.stdin)
p2 = subprocess.Popen(['echo','5'], stdin=subprocess.PIPE, stdout=p1.stdin)
p2 = subprocess.Popen(['echo','0'], stdin=subprocess.PIPE, stdout=p1.stdin)

output = p1.communicate()[0]
print output

実行ファイルを実行するプロセスを作成した後,実行ファイルのプロセスの入力にp2で作成したプロセスの出力をつなげればOK