# 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