teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

微修正

2019/01/23 18:10

投稿

Karasuryu
Karasuryu

スコア52

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でエンコードされるため、受け取った出力をデコードしています。更に標準出力の先頭に\x0c(改頁?)が付くので削ってます。かなり邪道な感じになりました。改善点等ありましたら教えてください。
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=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
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')[1:], stderr_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

結果の位置

2019/01/23 18:10

投稿

Karasuryu
Karasuryu

スコア52

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

結果

2019/01/23 11:18

投稿

Karasuryu
Karasuryu

スコア52

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

コード追記

2019/01/23 11:18

投稿

Karasuryu
Karasuryu

スコア52

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
+ ```