# 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
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.