# python : 關於參數設定 subprocess.run 基本上就是每個參數都分開,如果指令為這樣.. ``` curl -k -X POST -H "Authorization: Token aaaa" --header 'Content-Type: application/json' -d ' { "name":"primary", "device":72 }' https://localhost:8443/api/dcim/interfaces/ ``` 輸入的時候則為 ``` cmd = ['curl', '-k', '-X', 'POST', '-H', '"Authorization: Token aaaa"', '--header','Content-Type: application/json', '-d','{ "name":"primary", "device":11 }', 'https://localhost:8443/api/dcim/'] # 開 capture_output=True 可以輸出 output subprocess.run(cmd, capture_output=True) ``` ## 結論 : 如果想要測試參數怎麼設定,可以直接測 linux 的 execve 或者 execv ## 所以 subprocess.run 怎麼跑的? 從 souce code 可以看到 https://github.com/python/cpython/blob/master/Lib/subprocess.py#L489 run -> Popen-> init() https://github.com/python/cpython/blob/71876fa438f706b211360d8c205cb985906212ee/Lib/subprocess.py#L845 _execute_child->_posixsubprocess.fork_exec https://github.com/python/cpython/blob/71876fa438f706b211360d8c205cb985906212ee/Lib/subprocess.py#L1624-L1631 _posixsubprocess.c ->child_exec https://github.com/python/cpython/blob/762f93ff2efd6b7ef0177cad57939c0ab2002eac/Modules/_posixsubprocess.c#L511-L518 -> execve 或者 execv 這兩個部分屬於 linux 的函式呼叫 https://linux.die.net/man/2/execve 再追下去就是 linux lib 的部分了 ## Others Windows 有則是先組字串再執行 https://github.com/python/cpython/blob/71876fa438f706b211360d8c205cb985906212ee/Lib/subprocess.py#L1218