質問編集履歴
4
微修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
ボトルネックの解消のためにpypyを使い、それ以外の部分にはpypyを使わないようにするにはどのようにプログラムを作るといいですか?pypyで実行した関数の出力をCPythonで動かしているプログラムで利用するにはどうするべきですか?
|
2
2
|
|
3
3
|
|
4
|
-
subprocessを使ってみました。pypyで動かす分は別ファイルfib.pyになり、そこからの標準出力を返り値として利用してます。日本語版Windowsでは標準出力はデフォルトでcp932でエンコードされるため、受け取った出力をデコードしています。
|
4
|
+
subprocessを使ってみました。pypyで動かす分は別ファイルfib.pyになり、そこからの標準出力を返り値として利用してます。日本語版Windowsでは標準出力はデフォルトでcp932でエンコードされるため、受け取った出力をデコードしています。邪道な感じになりましたがとりあえず動きます。改善点等ありましたら教えてください。
|
5
5
|
|
6
6
|
|
7
7
|
atest.py
|
@@ -9,9 +9,9 @@
|
|
9
9
|
import subprocess
|
10
10
|
|
11
11
|
def exfunc(cmd):
|
12
|
-
p = subprocess.Popen(cmd, shell=
|
12
|
+
p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
13
13
|
stdout_data, stderr_data = p.communicate()
|
14
|
-
return p.returncode, stdout_data.decode('cp932')
|
14
|
+
return p.returncode, stdout_data.decode('cp932'), stderr_data.decode('cp932')
|
15
15
|
|
16
16
|
command = "pypy3 fib.py 35"
|
17
17
|
|
3
結果の位置
title
CHANGED
File without changes
|
body
CHANGED
@@ -16,6 +16,13 @@
|
|
16
16
|
command = "pypy3 fib.py 35"
|
17
17
|
|
18
18
|
print('Returncode:%s\n35番目のフィボナッチ数:%s\nstderr:%s'%exfunc(command))
|
19
|
+
|
20
|
+
|
21
|
+
'''
|
22
|
+
Returncode:0
|
23
|
+
35番目のフィボナッチ数:9227465
|
24
|
+
stderr:
|
25
|
+
'''
|
19
26
|
```
|
20
27
|
|
21
28
|
|
@@ -32,11 +39,4 @@
|
|
32
39
|
|
33
40
|
if __name__ == '__main__':
|
34
41
|
print(fib(sys.argv[1]), end='')
|
35
|
-
|
36
|
-
|
37
|
-
'''
|
38
|
-
Returncode:0
|
39
|
-
35番目のフィボナッチ数:9227465
|
40
|
-
stderr:
|
41
|
-
'''
|
42
42
|
```
|
2
結果
title
CHANGED
File without changes
|
body
CHANGED
@@ -32,4 +32,11 @@
|
|
32
32
|
|
33
33
|
if __name__ == '__main__':
|
34
34
|
print(fib(sys.argv[1]), end='')
|
35
|
+
|
36
|
+
|
37
|
+
'''
|
38
|
+
Returncode:0
|
39
|
+
35番目のフィボナッチ数:9227465
|
40
|
+
stderr:
|
41
|
+
'''
|
35
42
|
```
|
1
コード追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,1 +1,35 @@
|
|
1
|
-
ボトルネックの解消のためにpypyを使い、それ以外の部分にはpypyを使わないようにするにはどのようにプログラムを作るといいですか?pypyで実行した関数の出力をCPythonで動かしているプログラムで利用するにはどうするべきですか?
|
1
|
+
ボトルネックの解消のためにpypyを使い、それ以外の部分にはpypyを使わないようにするにはどのようにプログラムを作るといいですか?pypyで実行した関数の出力をCPythonで動かしているプログラムで利用するにはどうするべきですか?
|
2
|
+
|
3
|
+
|
4
|
+
subprocessを使ってみました。pypyで動かす分は別ファイルfib.pyになり、そこからの標準出力を返り値として利用してます。日本語版Windowsでは標準出力はデフォルトでcp932でエンコードされるため、受け取った出力をデコードしています。更に標準出力の先頭に\x0c(改頁?)が付くので削ってます。かなり邪道な感じになりました。改善点等ありましたら教えてください。
|
5
|
+
|
6
|
+
|
7
|
+
atest.py
|
8
|
+
```
|
9
|
+
import subprocess
|
10
|
+
|
11
|
+
def exfunc(cmd):
|
12
|
+
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
13
|
+
stdout_data, stderr_data = p.communicate()
|
14
|
+
return p.returncode, stdout_data.decode('cp932')[1:], stderr_data.decode('cp932')
|
15
|
+
|
16
|
+
command = "pypy3 fib.py 35"
|
17
|
+
|
18
|
+
print('Returncode:%s\n35番目のフィボナッチ数:%s\nstderr:%s'%exfunc(command))
|
19
|
+
```
|
20
|
+
|
21
|
+
|
22
|
+
fib.py
|
23
|
+
```
|
24
|
+
import sys
|
25
|
+
|
26
|
+
def fib(n):
|
27
|
+
n = int(n)
|
28
|
+
if n < 2:
|
29
|
+
return n
|
30
|
+
else:
|
31
|
+
return fib(n - 1) + fib(n - 2)
|
32
|
+
|
33
|
+
if __name__ == '__main__':
|
34
|
+
print(fib(sys.argv[1]), end='')
|
35
|
+
```
|