質問編集履歴

4

微修正

2019/01/23 18:10

投稿

Karasuryu
Karasuryu

スコア52

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- subprocessを使ってみました。pypyで動かす分は別ファイルfib.pyになり、そこからの標準出力を返り値として利用してます。日本語版Windowsでは標準出力はデフォルトでcp932でエンコードされるため、受け取った出力をデコードしています。更に標準出力の先頭に\x0c(改頁?)が付くので削ってます。かなり邪道な感じになりました。改善点等ありましたら教えてください。
7
+ subprocessを使ってみました。pypyで動かす分は別ファイルfib.pyになり、そこからの標準出力を返り値として利用してます。日本語版Windowsでは標準出力はデフォルトでcp932でエンコードされるため、受け取った出力をデコードしています。邪道な感じになりましたがとりあえず動きます。改善点等ありましたら教えてください。
8
8
 
9
9
 
10
10
 
@@ -20,11 +20,11 @@
20
20
 
21
21
  def exfunc(cmd):
22
22
 
23
- p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
23
+ p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
24
24
 
25
25
  stdout_data, stderr_data = p.communicate()
26
26
 
27
- return p.returncode, stdout_data.decode('cp932')[1:], stderr_data.decode('cp932')
27
+ return p.returncode, stdout_data.decode('cp932'), stderr_data.decode('cp932')
28
28
 
29
29
 
30
30
 

3

結果の位置

2019/01/23 18:10

投稿

Karasuryu
Karasuryu

スコア52

test CHANGED
File without changes
test CHANGED
@@ -34,6 +34,20 @@
34
34
 
35
35
  print('Returncode:%s\n35番目のフィボナッチ数:%s\nstderr:%s'%exfunc(command))
36
36
 
37
+
38
+
39
+
40
+
41
+ '''
42
+
43
+ Returncode:0
44
+
45
+ 35番目のフィボナッチ数:9227465
46
+
47
+ stderr:
48
+
49
+ '''
50
+
37
51
  ```
38
52
 
39
53
 
@@ -66,18 +80,4 @@
66
80
 
67
81
  print(fib(sys.argv[1]), end='')
68
82
 
69
-
70
-
71
-
72
-
73
- '''
74
-
75
- Returncode:0
76
-
77
- 35番目のフィボナッチ数:9227465
78
-
79
- stderr:
80
-
81
- '''
82
-
83
83
  ```

2

結果

2019/01/23 11:18

投稿

Karasuryu
Karasuryu

スコア52

test CHANGED
File without changes
test CHANGED
@@ -66,4 +66,18 @@
66
66
 
67
67
  print(fib(sys.argv[1]), end='')
68
68
 
69
+
70
+
71
+
72
+
73
+ '''
74
+
75
+ Returncode:0
76
+
77
+ 35番目のフィボナッチ数:9227465
78
+
79
+ stderr:
80
+
81
+ '''
82
+
69
83
  ```

1

コード追記

2019/01/23 11:18

投稿

Karasuryu
Karasuryu

スコア52

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