{"id":77290,"date":"2026-02-24T10:49:50","date_gmt":"2026-02-24T02:49:50","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/77290.html"},"modified":"2026-02-24T10:49:50","modified_gmt":"2026-02-24T02:49:50","slug":"%e4%bb%8esamba%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8b%e8%bd%bd%e6%96%87%e4%bb%b6%e5%b7%a5%e5%85%b7","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/77290.html","title":{"rendered":"\u4ecesamba\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177"},"content":{"rendered":"<h2>\u4ece Samba \u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177<\/h2>\n<p>\u542f\u7528samba<\/p>\n<h3>\u9879\u76ee\u6982\u8ff0<\/h3>\n<p>\u8fd9\u662f\u4e00\u4e2a\u7528\u4e8e\u4ece Samba \u5171\u4eab\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\/\u6587\u4ef6\u5939\u7684\u5de5\u5177&#xff0c;\u652f\u6301\u6279\u91cf\u4e0b\u8f7d\u3001\u6a21\u5757\u5316\u914d\u7f6e\u548c\u81ea\u5b9a\u4e49\u672c\u5730\u76ee\u5f55\u7ed3\u6784\u3002<\/p>\n<h3>\u9879\u76ee\u7ed3\u6784<\/h3>\n<p>get-samba-file\/<br \/>\n\u251c\u2500\u2500 config.yaml                    # \u914d\u7f6e\u6587\u4ef6&#xff08;YAML\u683c\u5f0f&#xff09;<br \/>\n\u251c\u2500\u2500 run.bat                        # Windows \u542f\u52a8\u811a\u672c<br \/>\n\u251c\u2500\u2500 scripts\/<br \/>\n\u2502   \u2514\u2500\u2500 samba_downloader.py        # \u4e3b Python \u811a\u672c<br \/>\n\u251c\u2500\u2500 doc\/<br \/>\n\u2502   \u2514\u2500\u2500 \u4ecesamba\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177.md  # \u672c\u6587\u6863<br \/>\n\u2514\u2500\u2500 downloads\/                     # \u4e0b\u8f7d\u6587\u4ef6\u5b58\u653e\u76ee\u5f55&#xff08;\u81ea\u52a8\u521b\u5efa&#xff09;<br \/>\n    \u251c\u2500\u2500 module_name1\/              # \u6309\u6a21\u5757\u540d\u7ec4\u7ec7\u7684\u5b50\u76ee\u5f55<br \/>\n    \u251c\u2500\u2500 module_name2\/<br \/>\n    \u2514\u2500\u2500 &#8230;<\/p>\n<h3>\u73af\u5883\u8981\u6c42<\/h3>\n<h4>\u7cfb\u7edf\u8981\u6c42<\/h4>\n<ul>\n<li>\u64cd\u4f5c\u7cfb\u7edf&#xff1a;Windows 7\/8\/10\/11<\/li>\n<li>Python \u7248\u672c&#xff1a;3.7 \u6216\u66f4\u9ad8\u7248\u672c<\/li>\n<\/ul>\n<h4>Python \u4f9d\u8d56\u5305<\/h4>\n<p>\u811a\u672c\u9700\u8981\u5b89\u88c5\u4ee5\u4e0b Python \u5305&#xff1a;<\/p>\n<ul>\n<li>PyYAML &#8211; \u7528\u4e8e\u89e3\u6790 YAML \u914d\u7f6e\u6587\u4ef6<\/li>\n<li>pysmb &#8211; \u7528\u4e8e\u8fde\u63a5 Samba \u670d\u52a1\u5668<\/li>\n<\/ul>\n<h3>\u5b89\u88c5\u6b65\u9aa4<\/h3>\n<h4>1. \u5b89\u88c5 Python<\/h4>\n<p>\u5982\u679c\u5c1a\u672a\u5b89\u88c5 Python&#xff0c;\u8bf7\u4ece\u4ee5\u4e0b\u5730\u5740\u4e0b\u8f7d\u5e76\u5b89\u88c5&#xff1a;<\/p>\n<ul>\n<li>\u4e0b\u8f7d\u5730\u5740&#xff1a;https:\/\/www.python.org\/downloads\/<\/li>\n<li>\u63a8\u8350\u7248\u672c&#xff1a;Python 3.11&#043;<\/li>\n<\/ul>\n<p>\u5b89\u88c5\u65f6\u8bf7\u52fe\u9009 \u201cAdd Python to PATH\u201d \u9009\u9879&#xff0c;\u5c06 Python \u6dfb\u52a0\u5230\u7cfb\u7edf\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<h4>2. \u5b89\u88c5\u4f9d\u8d56\u5305<\/h4>\n<p>\u6253\u5f00\u547d\u4ee4\u63d0\u793a\u7b26&#xff08;cmd&#xff09;\u6216 PowerShell&#xff0c;\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4&#xff1a;<\/p>\n<p>python -m pip <span class=\"token function\">install<\/span> PyYAML pysmb<\/p>\n<p>\u6216\u8005\u5982\u679c\u60a8\u7684\u7cfb\u7edf\u4e2d\u6709 python3 \u547d\u4ee4&#xff1a;<\/p>\n<p>python3 -m pip <span class=\"token function\">install<\/span> PyYAML pysmb<\/p>\n<h4>3. \u9a8c\u8bc1\u5b89\u88c5<\/h4>\n<p>\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u9a8c\u8bc1 Python \u548c\u4f9d\u8d56\u5305\u662f\u5426\u6b63\u786e\u5b89\u88c5&#xff1a;<\/p>\n<p>python &#8211;version<br \/>\npython -c <span class=\"token string\">&#034;import yaml; import smb; print(&#039;\u4f9d\u8d56\u5305\u5b89\u88c5\u6210\u529f&#039;)&#034;<\/span><\/p>\n<h3>\u914d\u7f6e\u8bf4\u660e<\/h3>\n<h4>config.yaml \u6587\u4ef6\u7ed3\u6784<\/h4>\n<p>\u914d\u7f6e\u6587\u4ef6\u91c7\u7528 YAML \u683c\u5f0f&#xff0c;\u652f\u6301\u6a21\u5757\u5316\u914d\u7f6e\u3002\u4ee5\u4e0b\u662f\u5b8c\u6574\u7684\u914d\u7f6e\u793a\u4f8b&#xff1a;<\/p>\n<p><span class=\"token comment\"># Samba \u670d\u52a1\u5668\u6a21\u5757\u6a21\u677f&#xff08;\u53ef\u9009&#xff0c;\u7528\u4e8e\u590d\u7528\u914d\u7f6e&#xff09;<\/span><br \/>\n<span class=\"token key atrule\">module_templates<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token comment\"># \u793a\u4f8b&#xff1a;\u5b9a\u4e49\u4e00\u4e2a\u53ef\u590d\u7528\u7684\u6a21\u5757\u6a21\u677f<\/span><br \/>\n  <span class=\"token key atrule\">graphic<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token important\">&amp;graphic<\/span><br \/>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> graphic<br \/>\n    <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 633\/out\/arm64\/targets\/graphic\/graphic_2d\/<br \/>\n        <span class=\"token comment\"># local_name: graphic_2d    # \u53ef\u9009&#xff1a;\u81ea\u5b9a\u4e49\u672c\u5730\u76ee\u5f55\u540d<\/span><\/p>\n<p><span class=\"token comment\"># \u8bbe\u5907\u5217\u8868<\/span><br \/>\n<span class=\"token key atrule\">devices<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token comment\"># \u8bbe\u59071&#xff1a;192.168.16.17<\/span><br \/>\n  <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">ip<\/span><span class=\"token punctuation\">:<\/span> 192.168.16.17<br \/>\n    <span class=\"token key atrule\">share_name<\/span><span class=\"token punctuation\">:<\/span> shared_folder_17<br \/>\n    <span class=\"token key atrule\">username<\/span><span class=\"token punctuation\">:<\/span> root<br \/>\n    <span class=\"token key atrule\">password<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">123456<\/span><br \/>\n    <span class=\"token key atrule\">modules<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> kh_edgecomputing_thing_accessmanager_meta<br \/>\n        <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n          <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> kh5.0.1\/out\/arm64\/targets\/kh_edgecomputing\/kh_edgecomputing_thing_accessmanager_meta\/libnanning_subway_handler.z.so<br \/>\n            <span class=\"token comment\"># local_name: libnanning_subway_handler.z.so    # \u53ef\u9009<\/span><\/p>\n<p>  <span class=\"token comment\"># \u8bbe\u59072&#xff1a;192.168.16.40<\/span><br \/>\n  <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">ip<\/span><span class=\"token punctuation\">:<\/span> 192.168.16.40<br \/>\n    <span class=\"token key atrule\">share_name<\/span><span class=\"token punctuation\">:<\/span> shared_folder_40<br \/>\n    <span class=\"token key atrule\">username<\/span><span class=\"token punctuation\">:<\/span> root<br \/>\n    <span class=\"token key atrule\">password<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">123456<\/span><br \/>\n    <span class=\"token key atrule\">modules<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token comment\"># \u5f15\u7528\u6a21\u677f&#xff08;\u63a8\u8350&#xff09;<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token important\">*graphic<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token important\">*multimedia<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token important\">*audio_framework<\/span><br \/>\n      <span class=\"token comment\"># \u6216\u76f4\u63a5\u5b9a\u4e49<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> custom_module<br \/>\n        <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n          <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> some\/remote\/path\/<br \/>\n            <span class=\"token key atrule\">local_name<\/span><span class=\"token punctuation\">:<\/span> custom_name<\/p>\n<h4>\u914d\u7f6e\u5b57\u6bb5\u8bf4\u660e<\/h4>\n<h5>\u8bbe\u5907\u7ea7\u914d\u7f6e&#xff08;devices[].*&#xff09;<\/h5>\n<ul>\n<li>ip&#xff1a;Samba \u670d\u52a1\u5668 IP \u5730\u5740&#xff08;\u5fc5\u9700&#xff09;<\/li>\n<li>share_name&#xff1a;\u5171\u4eab\u76ee\u5f55\u540d\u79f0&#xff08;\u5fc5\u9700&#xff09;<\/li>\n<li>username&#xff1a;\u767b\u5f55\u7528\u6237\u540d&#xff08;\u53ef\u9009&#xff0c;\u9ed8\u8ba4\u4e3a\u7a7a&#xff09;<\/li>\n<li>password&#xff1a;\u767b\u5f55\u5bc6\u7801&#xff08;\u53ef\u9009&#xff0c;\u9ed8\u8ba4\u4e3a\u7a7a&#xff09;<\/li>\n<\/ul>\n<h5>\u6a21\u5757\u7ea7\u914d\u7f6e&#xff08;devices[].modules[]&#xff09;<\/h5>\n<ul>\n<li>name&#xff1a;\u6a21\u5757\u540d\u79f0&#xff0c;\u5c06\u4f5c\u4e3a\u672c\u5730\u4e0b\u8f7d\u7684\u6839\u76ee\u5f55\u540d&#xff08;\u5fc5\u9700&#xff09;<\/li>\n<li>items&#xff1a;\u8be5\u6a21\u5757\u4e0b\u7684\u6587\u4ef6\/\u76ee\u5f55\u5217\u8868&#xff08;\u5fc5\u9700&#xff09;<\/li>\n<\/ul>\n<h5>\u9879\u76ee\u7ea7\u914d\u7f6e&#xff08;devices[].modules[].items[]&#xff09;<\/h5>\n<ul>\n<li>path&#xff1a;\u8fdc\u7a0b Samba \u5171\u4eab\u4e2d\u7684\u8def\u5f84&#xff08;\u5fc5\u9700&#xff09;<\/li>\n<li>local_name&#xff1a;\u81ea\u5b9a\u4e49\u672c\u5730\u6587\u4ef6\u540d\/\u76ee\u5f55\u540d&#xff08;\u53ef\u9009&#xff09;\n<ul>\n<li>\u5982\u679c\u4e0d\u6307\u5b9a&#xff0c;\u5c06\u4f7f\u7528\u8fdc\u7a0b\u8def\u5f84\u7684\u6700\u540e\u4e00\u90e8\u5206\u4f5c\u4e3a\u672c\u5730\u540d\u79f0<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>\u6a21\u677f\u590d\u7528<\/h4>\n<p>YAML \u652f\u6301\u951a\u70b9&#xff08;&amp;&#xff09;\u548c\u5f15\u7528&#xff08;*&#xff09;\u8bed\u6cd5&#xff0c;\u53ef\u4ee5\u5b9a\u4e49\u53ef\u590d\u7528\u7684\u6a21\u5757\u6a21\u677f&#xff1a;<\/p>\n<p><span class=\"token key atrule\">module_templates<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token key atrule\">camera<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token important\">&amp;camera<\/span><br \/>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> camera<br \/>\n    <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 633\/out\/arm64\/targets\/multimedia\/camera_framework\/<\/p>\n<p><span class=\"token key atrule\">devices<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">ip<\/span><span class=\"token punctuation\">:<\/span> 192.168.16.40<br \/>\n    <span class=\"token key atrule\">share_name<\/span><span class=\"token punctuation\">:<\/span> shared_folder_40<br \/>\n    <span class=\"token key atrule\">modules<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token important\">*camera<\/span>  <span class=\"token comment\"># \u5f15\u7528\u6a21\u677f<\/span><\/p>\n<h3>\u4f7f\u7528\u65b9\u6cd5<\/h3>\n<h4>1. \u914d\u7f6e config.yaml<\/h4>\n<p>\u6839\u636e\u60a8\u7684 Samba \u670d\u52a1\u5668\u4fe1\u606f\u7f16\u8f91 config.yaml \u6587\u4ef6\u3002<\/p>\n<h4>2. \u8fd0\u884c\u811a\u672c<\/h4>\n<p>\u53cc\u51fb run.bat \u6587\u4ef6&#xff0c;\u6216\u5728\u547d\u4ee4\u63d0\u793a\u7b26\u4e2d\u8fd0\u884c&#xff1a;<\/p>\n<p>run.bat<\/p>\n<h4>3. \u4ea4\u4e92\u64cd\u4f5c<\/h4>\n<p>\u811a\u672c\u4f1a\u663e\u793a\u53ef\u7528\u8bbe\u5907\u5217\u8868&#xff0c;\u7528\u6237\u9009\u62e9\u8bbe\u5907\u540e\u8fdb\u5165\u529f\u80fd\u83dc\u5355&#xff1a;<\/p>\n<li>\u663e\u793a\u8bbe\u5907\u5b8c\u6574\u914d\u7f6e&#xff1a;\u67e5\u770b\u5f53\u524d\u8bbe\u5907\u7684\u8be6\u7ec6\u914d\u7f6e<\/li>\n<li>\u68c0\u6d4bIP\u8fde\u901a\u6027&#xff1a;\u6d4b\u8bd5\u4e0e\u8bbe\u5907\u7684\u7f51\u7edc\u8fde\u63a5<\/li>\n<li>\u83b7\u53d6\u6587\u4ef6\/\u6587\u4ef6\u5939&#xff1a;\u4e0b\u8f7d\u6587\u4ef6&#xff08;\u652f\u6301\u5355\u9009\u6216\u6279\u91cf\u4e0b\u8f7d&#xff09;<\/li>\n<li>\u8fd4\u56de\u8bbe\u5907\u9009\u62e9\u754c\u9762&#xff1a;\u5207\u6362\u5230\u5176\u4ed6\u8bbe\u5907<\/li>\n<li>\u9000\u51fa\u811a\u672c&#xff1a;\u7ed3\u675f\u7a0b\u5e8f<\/li>\n<h4>\u4e0b\u8f7d\u89c4\u5219<\/h4>\n<ul>\n<li>\u76ee\u5f55\u7ed3\u6784&#xff1a;\u6587\u4ef6\u6309\u6a21\u5757\u540d\u7ec4\u7ec7&#xff0c;\u5b58\u653e\u5728 downloads\/\u6a21\u5757\u540d\/ \u4e0b<\/li>\n<li>\u6587\u4ef6\u547d\u540d&#xff1a;\n<ul>\n<li>\u5982\u679c\u8bbe\u7f6e\u4e86 local_name&#xff0c;\u4f7f\u7528\u81ea\u5b9a\u4e49\u540d\u79f0<\/li>\n<li>\u5426\u5219\u4f7f\u7528\u8fdc\u7a0b\u8def\u5f84\u7684\u6700\u540e\u4e00\u90e8\u5206<\/li>\n<\/ul>\n<\/li>\n<li>\u76ee\u5f55\u4e0b\u8f7d&#xff1a;\u9012\u5f52\u4e0b\u8f7d\u6574\u4e2a\u76ee\u5f55\u7ed3\u6784<\/li>\n<li>\u8bb0\u5f55\u6587\u4ef6&#xff1a;\u6bcf\u6b21\u4e0b\u8f7d\u4f1a\u5728\u76ee\u6807\u76ee\u5f55\u751f\u6210 info.txt&#xff0c;\u8bb0\u5f55\u4e0b\u8f7d\u4fe1\u606f<\/li>\n<\/ul>\n<h3>\u6545\u969c\u6392\u9664<\/h3>\n<h4>\u5e38\u89c1\u95ee\u9898<\/h4>\n<li>\n<p>ModuleNotFoundError: No module named \u2018yaml\u2019<\/p>\n<ul>\n<li>\u89e3\u51b3&#xff1a;\u8fd0\u884c python -m pip install PyYAML pysmb<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u8fde\u63a5\u5931\u8d25<\/p>\n<ul>\n<li>\u68c0\u67e5 IP \u5730\u5740\u662f\u5426\u6b63\u786e<\/li>\n<li>\u786e\u8ba4 Samba \u670d\u52a1\u6b63\u5728\u8fd0\u884c<\/li>\n<li>\u9a8c\u8bc1\u7528\u6237\u540d\u548c\u5bc6\u7801<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u6743\u9650\u4e0d\u8db3<\/p>\n<ul>\n<li>\u68c0\u67e5 Samba \u5171\u4eab\u6743\u9650\u8bbe\u7f6e<\/li>\n<li>\u786e\u8ba4\u7528\u6237\u6709\u8bfb\u53d6\u6743\u9650<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u4e2d\u6587\u4e71\u7801<\/p>\n<ul>\n<li>\u811a\u672c\u5df2\u914d\u7f6e UTF-8 \u7f16\u7801&#xff0c;\u5982\u4ecd\u6709\u95ee\u9898\u8bf7\u68c0\u67e5\u63a7\u5236\u53f0\u7f16\u7801<\/li>\n<\/ul>\n<\/li>\n<h4>\u65e5\u5fd7\u67e5\u770b<\/h4>\n<p>\u4e0b\u8f7d\u8bb0\u5f55\u4fdd\u5b58\u5728\u5404\u6a21\u5757\u76ee\u5f55\u7684 info.txt \u6587\u4ef6\u4e2d&#xff0c;\u5305\u542b&#xff1a;<\/p>\n<ul>\n<li>\u4e0b\u8f7d\u65f6\u95f4<\/li>\n<li>\u8fdc\u7a0b IP \u548c\u5171\u4eab\u540d<\/li>\n<li>\u8fdc\u7a0b\u8def\u5f84<\/li>\n<li>\u672c\u5730\u4fdd\u5b58\u8def\u5f84<\/li>\n<li>\u4f7f\u7528\u7528\u6237\u540d<\/li>\n<\/ul>\n<h3>\u9ad8\u7ea7\u914d\u7f6e<\/h3>\n<h4>\u591a\u8bbe\u5907\u652f\u6301<\/h4>\n<p>\u914d\u7f6e\u6587\u4ef6\u652f\u6301\u591a\u4e2a\u8bbe\u5907&#xff0c;\u811a\u672c\u4f1a\u663e\u793a\u8bbe\u5907\u5217\u8868\u4f9b\u9009\u62e9\u3002<\/p>\n<h4>\u6279\u91cf\u4e0b\u8f7d<\/h4>\n<p>\u5728\u6587\u4ef6\u9009\u62e9\u754c\u9762\u8f93\u5165\u7279\u6b8a\u6570\u5b57&#xff1a;<\/p>\n<ul>\n<li>0&#xff1a;\u9000\u51fa\u5f53\u524d\u754c\u9762<\/li>\n<li>\u6240\u6709\u9879\u76ee\u6570\u91cf &#043; 1&#xff1a;\u5168\u90e8\u4e0b\u8f7d<\/li>\n<\/ul>\n<h4>\u81ea\u5b9a\u4e49\u672c\u5730\u540d\u79f0<\/h4>\n<p>\u901a\u8fc7 local_name \u5b57\u6bb5\u81ea\u5b9a\u4e49\u4e0b\u8f7d\u540e\u7684\u6587\u4ef6\u540d\/\u76ee\u5f55\u540d\u3002<\/p>\n<h3>\u7248\u672c\u4fe1\u606f<\/h3>\n<ul>\n<li>\u5f53\u524d\u7248\u672c&#xff1a;v1.0<\/li>\n<li>\u652f\u6301\u5e73\u53f0&#xff1a;Windows<\/li>\n<li>Python \u8981\u6c42&#xff1a;&gt;&#061; 3.7<\/li>\n<\/ul>\n<h3>\u5b8c\u6574\u6587\u4ef6\u5185\u5bb9<\/h3>\n<p>\u4e3a\u4e86\u4fbf\u4e8e\u5feb\u901f\u90e8\u7f72&#xff0c;\u4ee5\u4e0b\u662f\u5b8c\u6574\u7684\u6587\u4ef6\u5185\u5bb9&#xff0c;\u60a8\u53ef\u4ee5\u76f4\u63a5\u590d\u5236\u521b\u5efa\u76f8\u5e94\u6587\u4ef6\u3002<\/p>\n<h4>1. \u521b\u5efa\u4e3b\u811a\u672c\u6587\u4ef6&#xff1a;scripts\/samba_downloader.py<\/h4>\n<p>\u9996\u5148\u521b\u5efa scripts \u76ee\u5f55&#xff0c;\u7136\u540e\u521b\u5efa samba_downloader.py \u6587\u4ef6&#xff1a;<\/p>\n<p><span class=\"token keyword\">import<\/span> subprocess<br \/>\n<span class=\"token keyword\">import<\/span> os<br \/>\n<span class=\"token keyword\">import<\/span> sys<br \/>\n<span class=\"token keyword\">import<\/span> importlib<span class=\"token punctuation\">.<\/span>util<br \/>\n<span class=\"token keyword\">from<\/span> datetime <span class=\"token keyword\">import<\/span> datetime  <span class=\"token comment\"># \u65b0\u589e&#xff1a;\u7528\u4e8e\u8bb0\u5f55\u4e0b\u8f7d\u65f6\u95f4<\/span><\/p>\n<p><span class=\"token comment\"># \u5ef6\u8fdf\u5bfc\u5165 yaml&#xff0c;\u5148\u7ed9\u51fa\u53cb\u597d\u63d0\u793a<\/span><br \/>\n<span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">import<\/span> yaml  <span class=\"token comment\"># \u65b0\u589e&#xff1a;\u7528\u4e8e\u89e3\u6790yaml\u6587\u4ef6<\/span><br \/>\n<span class=\"token keyword\">except<\/span> ImportError<span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u274c \u7f3a\u5c11\u4f9d\u8d56&#xff1a;PyYAML&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#x1f449; \u8bf7\u8fd0\u884c&#xff1a;python -m pip install PyYAML pysmb&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">check_environment<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u68c0\u6d4b\u8fd0\u884c\u73af\u5883\u4e0e\u4f9d\u8d56&#xff0c;\u7f3a\u5931\u65f6\u7ed9\u51fa\u63d0\u793a&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token comment\"># Python \u7248\u672c\u8981\u6c42<\/span><br \/>\n    major<span class=\"token punctuation\">,<\/span> minor <span class=\"token operator\">&#061;<\/span> sys<span class=\"token punctuation\">.<\/span>version_info<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    min_major<span class=\"token punctuation\">,<\/span> min_minor <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">7<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>major<span class=\"token punctuation\">,<\/span> minor<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token punctuation\">(<\/span>min_major<span class=\"token punctuation\">,<\/span> min_minor<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c Python \u7248\u672c\u8fc7\u4f4e&#xff0c;\u5f53\u524d <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>major<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">.<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>minor<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff0c;\u8bf7\u5347\u7ea7\u5230 &gt;&#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>min_major<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">.<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>min_minor<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u5fc5\u9700\u4f9d\u8d56<\/span><br \/>\n    requirements <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><br \/>\n        <span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;yaml&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;PyYAML&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;smb.SMBConnection&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;pysmb&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">]<\/span><br \/>\n    missing <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> mod<span class=\"token punctuation\">,<\/span> pip_name <span class=\"token keyword\">in<\/span> requirements<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> importlib<span class=\"token punctuation\">.<\/span>util<span class=\"token punctuation\">.<\/span>find_spec<span class=\"token punctuation\">(<\/span>mod<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">is<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            missing<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>pip_name<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> missing<span class=\"token punctuation\">:<\/span><br \/>\n        miss_str <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;, &#034;<\/span><span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>missing<span class=\"token punctuation\">)<\/span><br \/>\n        pip_cmd <span class=\"token operator\">&#061;<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f&#034;python -m pip install <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#039; &#039;<\/span><span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>missing<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u7f3a\u5c11\u4f9d\u8d56&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>miss_str<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;&#x1f449; \u8bf7\u8fd0\u884c\u5b89\u88c5\u547d\u4ee4&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>pip_cmd<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u2705 \u73af\u5883\u68c0\u67e5\u901a\u8fc7&#xff1a;Python <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>major<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">.<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>minor<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff0c;\u4f9d\u8d56\u9f50\u5168&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">read_device_config<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;<br \/>\n    \u8bfb\u53d6yaml\u683c\u5f0f\u7684\u8bbe\u5907\u914d\u7f6e\u6587\u4ef6&#xff0c;\u8fd4\u56de\u8bbe\u5907\u5217\u8868&#xff08;\u5305\u542bIP\u3001\u6a21\u5757\u3001\u8def\u5f84\u53ca\u51ed\u636e&#xff09;<br \/>\n    \u671f\u671b\u6587\u4ef6&#xff1a;config.yaml<br \/>\n    &#034;&#034;&#034;<\/span><br \/>\n    config_path <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>dirname<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>dirname<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>abspath<span class=\"token punctuation\">(<\/span>__file__<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;config.yaml&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>exists<span class=\"token punctuation\">(<\/span>config_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u274c \u672a\u627e\u5230\u914d\u7f6e\u6587\u4ef6&#xff0c;\u8bf7\u5728\u811a\u672c\u540c\u76ee\u5f55\u521b\u5efa &#039;config.yaml&#039;&#xff0c;\u793a\u4f8b&#xff1a;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token triple-quoted-string string\">&#034;&#034;&#034;<br \/>\ndevices:<br \/>\n  &#8211; ip: 192.168.16.40<br \/>\n    share_name: shared_folder_40<br \/>\n    username: root<br \/>\n    password: 123456<br \/>\n    modules:<br \/>\n      &#8211; name: camera<br \/>\n        items:<br \/>\n          &#8211; path: 633\/out\/arm64\/targets\/multimedia\/camera_framework\/<br \/>\n            local_name: camera_framework   # \u53ef\u9009&#xff1a;\u81ea\u5b9a\u4e49\u672c\u5730\u76ee\u5f55\/\u6587\u4ef6\u540d<br \/>\n          &#8211; path: 001\/out\/tr12\/multimedia\/audio_framework\/libaudio_service.z.so<br \/>\n      &#8211; name: graphic<br \/>\n        items:<br \/>\n          &#8211; path: 633\/out\/arm64\/targets\/graphic\/graphic_2d\/<br \/>\n&#034;&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>config_path<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;r&#034;<\/span><span class=\"token punctuation\">,<\/span> encoding<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;utf-8&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span><br \/>\n            raw <span class=\"token operator\">&#061;<\/span> yaml<span class=\"token punctuation\">.<\/span>safe_load<span class=\"token punctuation\">(<\/span>f<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u8bfb\u53d6 &#039;config.yaml&#039; \u5931\u8d25&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token string\">&#034;devices&#034;<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> raw <span class=\"token keyword\">or<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token builtin\">isinstance<\/span><span class=\"token punctuation\">(<\/span>raw<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;devices&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">list<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token keyword\">not<\/span> raw<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;devices&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u274c \u914d\u7f6e\u9519\u8bef&#xff1a;config.yaml \u4e2d\u672a\u627e\u5230 devices \u5217\u8868&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    devices <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> dev <span class=\"token keyword\">in<\/span> raw<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;devices&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        ip <span class=\"token operator\">&#061;<\/span> dev<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ip&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        share_name <span class=\"token operator\">&#061;<\/span> dev<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;share_name&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        modules <span class=\"token operator\">&#061;<\/span> dev<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;modules&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> ip <span class=\"token keyword\">or<\/span> <span class=\"token keyword\">not<\/span> share_name<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u274c \u914d\u7f6e\u9519\u8bef&#xff1a;\u6bcf\u4e2a\u8bbe\u5907\u5fc5\u987b\u5305\u542b ip \u4e0e share_name&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token builtin\">isinstance<\/span><span class=\"token punctuation\">(<\/span>modules<span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">list<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token keyword\">not<\/span> modules<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u914d\u7f6e\u9519\u8bef&#xff1a;\u8bbe\u5907 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u672a\u914d\u7f6e modules \u6216 modules \u4e3a\u7a7a&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        normalized_modules <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> mod <span class=\"token keyword\">in<\/span> modules<span class=\"token punctuation\">:<\/span><br \/>\n            mod_name <span class=\"token operator\">&#061;<\/span> mod<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            items <span class=\"token operator\">&#061;<\/span> mod<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;items&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> mod_name<span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u914d\u7f6e\u9519\u8bef&#xff1a;\u8bbe\u5907 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u7684\u67d0\u4e2a\u6a21\u5757\u7f3a\u5c11 name&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token builtin\">isinstance<\/span><span class=\"token punctuation\">(<\/span>items<span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">list<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token keyword\">not<\/span> items<span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u914d\u7f6e\u9519\u8bef&#xff1a;\u8bbe\u5907 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u7684\u6a21\u5757 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>mod_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u7f3a\u5c11 items \u5217\u8868&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            normalized_items <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> item <span class=\"token keyword\">in<\/span> items<span class=\"token punctuation\">:<\/span><br \/>\n                path <span class=\"token operator\">&#061;<\/span> item<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> path<span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u914d\u7f6e\u9519\u8bef&#xff1a;\u8bbe\u5907 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u7684\u6a21\u5757 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>mod_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u5b58\u5728\u7f3a\u5c11 path \u7684\u6761\u76ee&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                    sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                normalized_items<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">:<\/span> path<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;local_name&#034;<\/span><span class=\"token punctuation\">:<\/span> item<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;local_name&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>strip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token boolean\">None<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            normalized_modules<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">:<\/span> mod_name<span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;items&#034;<\/span><span class=\"token punctuation\">:<\/span> normalized_items<br \/>\n            <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># \u6241\u5e73\u5316\u76ee\u6807\u5217\u8868&#xff0c;\u4fbf\u4e8e\u5c55\u793a\u548c\u9009\u62e9<\/span><br \/>\n        targets <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> mod <span class=\"token keyword\">in<\/span> normalized_modules<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> item <span class=\"token keyword\">in<\/span> mod<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;items&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                targets<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token string\">&#034;module&#034;<\/span><span class=\"token punctuation\">:<\/span> mod<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">:<\/span> item<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;local_name&#034;<\/span><span class=\"token punctuation\">:<\/span> item<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;local_name&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        devices<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;ip&#034;<\/span><span class=\"token punctuation\">:<\/span> ip<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;share_name&#034;<\/span><span class=\"token punctuation\">:<\/span> share_name<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;modules&#034;<\/span><span class=\"token punctuation\">:<\/span> normalized_modules<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;targets&#034;<\/span><span class=\"token punctuation\">:<\/span> targets<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token comment\"># \u786e\u4fdd\u7528\u6237\u540d\/\u5bc6\u7801\u4e3a\u5b57\u7b26\u4e32&#xff0c;\u907f\u514d\u89e3\u6790\u4e3a\u6570\u5b57\u5bfc\u81f4 pysmb \u62a5\u9519<\/span><br \/>\n            <span class=\"token string\">&#034;username&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>dev<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;username&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;password&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>dev<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;password&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">return<\/span> devices<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">ping_ip<\/span><span class=\"token punctuation\">(<\/span>ip<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;ping\u6307\u5b9aIP&#xff0c;\u8fd4\u56de\u662f\u5426\u8fde\u901a&#xff08;Windows\u7cfb\u7edf&#xff09;&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        result <span class=\"token operator\">&#061;<\/span> subprocess<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span><br \/>\n            <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ping&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;-n&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;2&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;-w&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;1000&#034;<\/span><span class=\"token punctuation\">,<\/span> ip<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            stdout<span class=\"token operator\">&#061;<\/span>subprocess<span class=\"token punctuation\">.<\/span>PIPE<span class=\"token punctuation\">,<\/span><br \/>\n            stderr<span class=\"token operator\">&#061;<\/span>subprocess<span class=\"token punctuation\">.<\/span>PIPE<span class=\"token punctuation\">,<\/span><br \/>\n            text<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><br \/>\n        <span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> result<span class=\"token punctuation\">.<\/span>returncode <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u26a0\ufe0f ping\u68c0\u6d4b\u51fa\u9519&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">False<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">select_device<\/span><span class=\"token punctuation\">(<\/span>devices<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u8ba9\u7528\u6237\u9009\u62e9\u8981\u8fde\u63a5\u7684\u8bbe\u5907&#xff08;\u663e\u793aIP\u53ca\u5173\u952e\u53c2\u6570&#xff09;&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#x1f4cb; \u53ef\u7528\u8bbe\u5907\u5217\u8868&#xff1a;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> i<span class=\"token punctuation\">,<\/span> dev <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">enumerate<\/span><span class=\"token punctuation\">(<\/span>devices<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;   <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>i<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">. IP&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>dev<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;ip&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token comment\"># \u6309\u6a21\u5757\u5206\u884c\u5c55\u793a\u76ee\u6807<\/span><br \/>\n        module_targets <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> t <span class=\"token keyword\">in<\/span> dev<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;targets&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            display_name <span class=\"token operator\">&#061;<\/span> t<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;local_name&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>basename<span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>rstrip<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\/\\\\\\\\&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n            module_targets<span class=\"token punctuation\">.<\/span>setdefault<span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;module&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>display_name<span class=\"token punctuation\">)<\/span><br \/>\n        total_targets <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">sum<\/span><span class=\"token punctuation\">(<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>v<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">for<\/span> v <span class=\"token keyword\">in<\/span> module_targets<span class=\"token punctuation\">.<\/span>values<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;      \u5171\u4eab\u76ee\u5f55&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>dev<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;share_name&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> | \u76ee\u6807\u9879&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>total_targets<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u4e2a&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;      \u76ee\u6807\u9884\u89c8&#xff1a;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> module<span class=\"token punctuation\">,<\/span> names <span class=\"token keyword\">in<\/span> module_targets<span class=\"token punctuation\">.<\/span>items<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;        [<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>module<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">] <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#039;, &#039;<\/span><span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>names<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">while<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            choice <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">input<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\\\\n\u8bf7\u8f93\u5165\u8981\u8fde\u63a5\u7684\u8bbe\u5907\u5e8f\u53f7&#xff08;1-<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>devices<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff09;&#xff1a;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> choice<span class=\"token punctuation\">.<\/span>isdigit<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u274c \u8bf7\u8f93\u5165\u6570\u5b57&#xff01;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">continue<\/span><br \/>\n            index <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>choice<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&lt;&#061;<\/span> index <span class=\"token operator\">&lt;<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>devices<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">return<\/span> devices<span class=\"token punctuation\">[<\/span>index<span class=\"token punctuation\">]<\/span><br \/>\n            <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u5e8f\u53f7\u8d85\u51fa\u8303\u56f4&#xff0c;\u8bf7\u8f93\u51651\u5230<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>devices<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u4e4b\u95f4\u7684\u6570\u5b57&#xff01;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u26a0\ufe0f \u9009\u62e9\u51fa\u9519&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff0c;\u8bf7\u91cd\u65b0\u8f93\u5165&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">function_menu<\/span><span class=\"token punctuation\">(<\/span>selected_device<span class=\"token punctuation\">,<\/span> is_single_device<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u529f\u80fd\u83dc\u5355&#xff08;\u663e\u793a\u8bbe\u5907\u5b8c\u6574\u53c2\u6570\u53ca\u6240\u6709\u8fdc\u7a0b\u8def\u5f84&#xff09;&#034;&#034;&#034;<\/span><br \/>\n    ip <span class=\"token operator\">&#061;<\/span> selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ip&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\\\\n\u2705 \u5df2\u9009\u62e9\u8bbe\u5907&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff0c;\u8fdb\u5165\u529f\u80fd\u83dc\u5355&#xff1a;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\"># \u6062\u590d\u8fd9\u6761\u6253\u5370&#xff0c;\u786e\u4fdd\u4e00\u81f4\u6027<\/span><br \/>\n    <span class=\"token keyword\">while<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;1. \u663e\u793a\u8bbe\u5907\u5b8c\u6574\u914d\u7f6e&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;2. \u68c0\u6d4bIP\u8fde\u901a\u6027&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;3. \u83b7\u53d6\u6587\u4ef6\/\u6587\u4ef6\u5939&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> is_single_device<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;4. \u8fd4\u56de\u8bbe\u5907\u9009\u62e9\u754c\u9762&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            last_option_num <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">5<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            last_option_num <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">4<\/span> <span class=\"token comment\"># \u5982\u679c\u6ca1\u6709&#034;\u8fd4\u56de\u8bbe\u5907\u9009\u62e9\u754c\u9762&#034;&#xff0c;\u5219&#034;\u9000\u51fa\u811a\u672c&#034;\u662f\u7b2c4\u4e2a\u9009\u9879<\/span><\/p>\n<p>        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>last_option_num<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">. \u9000\u51fa\u811a\u672c&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            func_choice <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">input<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u8bf7\u9009\u62e9\u529f\u80fd&#xff08;1-<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>last_option_num<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff09;&#xff1a;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> func_choice<span class=\"token punctuation\">.<\/span>isdigit<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u274c \u65e0\u6548\u9009\u62e9&#xff0c;\u8bf7\u8f93\u5165\u6570\u5b57&#xff01;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">continue<\/span><\/p>\n<p>            choice_int <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>func_choice<span class=\"token punctuation\">)<\/span><\/p>\n<p>            <span class=\"token keyword\">if<\/span> choice_int <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n\u8bbe\u5907\u5b8c\u6574\u914d\u7f6e&#xff1a;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;   IP&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;ip&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;   \u5171\u4eab\u76ee\u5f55&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;share_name&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;   \u8fdc\u7a0b\u6587\u4ef6\u8def\u5f84\u5217\u8868&#xff1a;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> i<span class=\"token punctuation\">,<\/span> t <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">enumerate<\/span><span class=\"token punctuation\">(<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;targets&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    display_name <span class=\"token operator\">&#061;<\/span> t<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;local_name&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>basename<span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>rstrip<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\/\\\\\\\\&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n                    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;      \u8def\u5f84<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>i<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff1a;[<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;module&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">] <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;path&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> -&gt; \u672c\u5730\u540d: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>display_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;   \u7528\u6237\u540d&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;username&#039;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#039;\u672a\u8bbe\u7f6e&#039;<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;   \u5bc6\u7801&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#039;*&#039;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;password&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">if<\/span> selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;password&#039;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token string\">&#039;\u672a\u8bbe\u7f6e&#039;<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token comment\"># \u5bc6\u7801\u8131\u654f<\/span><br \/>\n            <span class=\"token keyword\">elif<\/span> choice_int <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                is_alive <span class=\"token operator\">&#061;<\/span> ping_ip<span class=\"token punctuation\">(<\/span>ip<span class=\"token punctuation\">)<\/span><br \/>\n                status <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u6b63\u5e38&#034;<\/span> <span class=\"token keyword\">if<\/span> is_alive <span class=\"token keyword\">else<\/span> <span class=\"token string\">&#034;\u4e2d\u65ad&#034;<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\\\\n<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u8fde\u901a\u6027\u68c0\u6d4b&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>status<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">elif<\/span> choice_int <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                handle_file_retrieval<span class=\"token punctuation\">(<\/span>selected_device<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">elif<\/span> choice_int <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">4<\/span> <span class=\"token keyword\">and<\/span> <span class=\"token keyword\">not<\/span> is_single_device<span class=\"token punctuation\">:<\/span> <span class=\"token comment\"># \u591a\u8bbe\u5907\u65f6\u7684&#034;\u8fd4\u56de\u8bbe\u5907\u9009\u62e9\u754c\u9762&#034;<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n\u8fd4\u56de\u8bbe\u5907\u9009\u62e9\u754c\u9762&#8230;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">return<\/span> <span class=\"token comment\"># \u8fd4\u56de\u5230main\u51fd\u6570\u4e2d\u7684\u8bbe\u5907\u9009\u62e9\u5faa\u73af<\/span><br \/>\n            <span class=\"token keyword\">elif<\/span> choice_int <span class=\"token operator\">&#061;&#061;<\/span> last_option_num<span class=\"token punctuation\">:<\/span> <span class=\"token comment\"># \u9000\u51fa\u811a\u672c (\u5355\u8bbe\u5907\u6216\u591a\u8bbe\u5907\u7684\u9000\u51fa\u9009\u9879)<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#x1f44b; \u9000\u51fa\u811a\u672c&#xff0c;\u518d\u89c1&#xff01;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u65e0\u6548\u9009\u62e9&#xff0c;\u8bf7\u8f93\u51651-<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>last_option_num<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u4e4b\u95f4\u7684\u6570\u5b57&#xff01;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u26a0\ufe0f \u529f\u80fd\u6267\u884c\u51fa\u9519&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">handle_file_retrieval<\/span><span class=\"token punctuation\">(<\/span>selected_device<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u5904\u7406\u6587\u4ef6\/\u6587\u4ef6\u5939\u7684\u83b7\u53d6\u903b\u8f91&#034;&#034;&#034;<\/span><br \/>\n    ip <span class=\"token operator\">&#061;<\/span> selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ip&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    share_name <span class=\"token operator\">&#061;<\/span> selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;share_name&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    targets <span class=\"token operator\">&#061;<\/span> selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;targets&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    username <span class=\"token operator\">&#061;<\/span> selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;username&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    password <span class=\"token operator\">&#061;<\/span> selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;password&#034;<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>    local_base_dir <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;.\/downloads&#034;<\/span><br \/>\n    os<span class=\"token punctuation\">.<\/span>makedirs<span class=\"token punctuation\">(<\/span>local_base_dir<span class=\"token punctuation\">,<\/span> exist_ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token comment\"># \u786e\u4fdd\u672c\u5730\u4e0b\u8f7d\u76ee\u5f55\u5b58\u5728<\/span><\/p>\n<p>    <span class=\"token keyword\">while<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\\\\n&#x1f4e6; \u53ef\u83b7\u53d6\u7684\u6587\u4ef6\/\u6587\u4ef6\u5939\u5217\u8868&#xff08;\u6765\u81ea <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\/<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>share_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff09;&#xff1a;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> i<span class=\"token punctuation\">,<\/span> t <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">enumerate<\/span><span class=\"token punctuation\">(<\/span>targets<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            display_name <span class=\"token operator\">&#061;<\/span> t<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;local_name&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>basename<span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>rstrip<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\/\\\\\\\\&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;   <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>i<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">. [<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;module&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">] <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;path&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> -&gt; \u672c\u5730: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>t<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;module&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\/<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>display_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;   <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>targets<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">. \u5168\u90e8\u83b7\u53d6&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;   0. \u9000\u51fa\u5f53\u524d\u754c\u9762&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\"># \u65b0\u589e\u9000\u51fa\u9009\u9879<\/span><\/p>\n<p>        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            choice <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">input<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\\\\n\u8bf7\u8f93\u5165\u8981\u83b7\u53d6\u7684\u5e8f\u53f7&#xff08;0-<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>targets<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff09;&#xff1a;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> choice<span class=\"token punctuation\">.<\/span>isdigit<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u274c \u8bf7\u8f93\u5165\u6570\u5b57&#xff01;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">continue<\/span><br \/>\n            index <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>choice<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><\/p>\n<p>            <span class=\"token keyword\">if<\/span> index <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token comment\"># \u7528\u6237\u9009\u62e9\u4e86\u9000\u51fa<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8fd4\u56de\u529f\u80fd\u83dc\u5355&#8230;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">break<\/span> <span class=\"token comment\"># \u9000\u51fa\u5f53\u524d\u5faa\u73af&#xff0c;\u8fd4\u56de\u4e0a\u4e00\u7ea7\u83dc\u5355<\/span><br \/>\n            <span class=\"token keyword\">elif<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&lt;&#061;<\/span> index <span class=\"token operator\">&lt;<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>targets<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>  <span class=\"token comment\"># \u7528\u6237\u9009\u62e9\u4e86\u7279\u5b9a\u6587\u4ef6\/\u6587\u4ef6\u5939<\/span><br \/>\n                target <span class=\"token operator\">&#061;<\/span> targets<span class=\"token punctuation\">[<\/span>index<span class=\"token punctuation\">]<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u5f00\u59cb\u83b7\u53d6&#xff1a;[<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>target<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;module&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">] <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>target<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;path&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                download_samb_item<span class=\"token punctuation\">(<\/span>ip<span class=\"token punctuation\">,<\/span> share_name<span class=\"token punctuation\">,<\/span> target<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> local_base_dir<span class=\"token punctuation\">,<\/span> username<span class=\"token punctuation\">,<\/span> password<span class=\"token punctuation\">,<\/span> target<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;module&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> target<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;local_name&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token comment\"># \u64cd\u4f5c\u5b8c\u6210\u540e\u4e0d\u9000\u51fa&#xff0c;\u7ee7\u7eed\u663e\u793a\u5f53\u524d\u83dc\u5355<\/span><br \/>\n            <span class=\"token keyword\">elif<\/span> index <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>targets<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>  <span class=\"token comment\"># \u7528\u6237\u9009\u62e9\u4e86\u5168\u90e8\u83b7\u53d6<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5f00\u59cb\u83b7\u53d6\u6240\u6709\u914d\u7f6e\u7684\u6587\u4ef6\/\u6587\u4ef6\u5939&#8230;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> target <span class=\"token keyword\">in<\/span> targets<span class=\"token punctuation\">:<\/span><br \/>\n                    download_samb_item<span class=\"token punctuation\">(<\/span>ip<span class=\"token punctuation\">,<\/span> share_name<span class=\"token punctuation\">,<\/span> target<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;path&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> local_base_dir<span class=\"token punctuation\">,<\/span> username<span class=\"token punctuation\">,<\/span> password<span class=\"token punctuation\">,<\/span> target<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;module&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> target<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;local_name&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6240\u6709\u6587\u4ef6\/\u6587\u4ef6\u5939\u83b7\u53d6\u5b8c\u6210&#xff01;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token comment\"># \u64cd\u4f5c\u5b8c\u6210\u540e\u4e0d\u9000\u51fa&#xff0c;\u7ee7\u7eed\u663e\u793a\u5f53\u524d\u83dc\u5355<\/span><br \/>\n            <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u5e8f\u53f7\u8d85\u51fa\u8303\u56f4&#xff0c;\u8bf7\u8f93\u51650\u5230<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>targets<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u4e4b\u95f4\u7684\u6570\u5b57&#xff01;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u26a0\ufe0f \u9009\u62e9\u51fa\u9519&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff0c;\u8bf7\u91cd\u65b0\u8f93\u5165&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">download_samb_item<\/span><span class=\"token punctuation\">(<\/span>ip<span class=\"token punctuation\">,<\/span> share_name<span class=\"token punctuation\">,<\/span> remote_path<span class=\"token punctuation\">,<\/span> local_base_dir<span class=\"token punctuation\">,<\/span> username<span class=\"token punctuation\">,<\/span> password<span class=\"token punctuation\">,<\/span> module_name<span class=\"token punctuation\">,<\/span> local_name<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u4eceSamba\u5171\u4eab\u4e0b\u8f7d\u6587\u4ef6\u6216\u6587\u4ef6\u5939 (\u4f7f\u7528pysmb\u5e93)&#xff0c;\u652f\u6301\u6a21\u5757\u6839\u76ee\u5f55\u4e0e\u81ea\u5b9a\u4e49\u672c\u5730\u540d&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">from<\/span> smb<span class=\"token punctuation\">.<\/span>SMBConnection <span class=\"token keyword\">import<\/span> SMBConnection<br \/>\n        <span class=\"token keyword\">from<\/span> smb<span class=\"token punctuation\">.<\/span>smb_structs <span class=\"token keyword\">import<\/span> OperationFailure<br \/>\n    <span class=\"token keyword\">except<\/span> ImportError<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u274c \u7f3a\u5c11 &#039;pysmb&#039; \u5e93\u3002\u8bf7\u8fd0\u884c &#039;pip install pysmb&#039; \u8fdb\u884c\u5b89\u88c5\u3002&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><\/p>\n<p>    conn <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">None<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token comment\"># \u521b\u5efa\u8fde\u63a5<\/span><br \/>\n        client_machine_name <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;PythonClient&#034;<\/span><br \/>\n        server_name <span class=\"token operator\">&#061;<\/span> ip<\/p>\n<p>        <span class=\"token comment\"># \u786e\u4fdd\u51ed\u636e\u4e3a\u5b57\u7b26\u4e32&#xff0c;\u907f\u514d int \u7c7b\u578b\u5f15\u53d1 encode \u9519\u8bef<\/span><br \/>\n        conn <span class=\"token operator\">&#061;<\/span> SMBConnection<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>username <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>password <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> client_machine_name<span class=\"token punctuation\">,<\/span> server_name<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> conn<span class=\"token punctuation\">.<\/span>connect<span class=\"token punctuation\">(<\/span>ip<span class=\"token punctuation\">,<\/span> <span class=\"token number\">445<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u65e0\u6cd5\u8fde\u63a5\u5230 Samba \u5171\u4eab <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">:445\u3002\u8bf7\u68c0\u67e5IP\u3001\u7528\u6237\u540d\u3001\u5bc6\u7801\u548c\u7f51\u7edc\u8fde\u63a5\u3002&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span><\/p>\n<p>        <span class=\"token comment\"># \u786e\u5b9a\u672c\u5730\u4fdd\u5b58\u8def\u5f84<\/span><br \/>\n        remote_path_cleaned <span class=\"token operator\">&#061;<\/span> remote_path<span class=\"token punctuation\">.<\/span>replace<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\\\\\\\\&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;\/&#039;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># \u9996\u5148\u83b7\u53d6\u8fdc\u7a0b\u8def\u5f84\u7684\u5c5e\u6027&#xff0c;\u4ee5\u786e\u5b9a\u662f\u6587\u4ef6\u8fd8\u662f\u76ee\u5f55<\/span><br \/>\n        is_directory <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">False<\/span><br \/>\n        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            smb_remote_path <span class=\"token operator\">&#061;<\/span> remote_path_cleaned<br \/>\n            file_attrs <span class=\"token operator\">&#061;<\/span> conn<span class=\"token punctuation\">.<\/span>getAttributes<span class=\"token punctuation\">(<\/span>share_name<span class=\"token punctuation\">,<\/span> smb_remote_path<span class=\"token punctuation\">)<\/span><br \/>\n            is_directory <span class=\"token operator\">&#061;<\/span> file_attrs<span class=\"token punctuation\">.<\/span>isDirectory<br \/>\n        <span class=\"token keyword\">except<\/span> OperationFailure <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c \u8fdc\u7a0b\u8def\u5f84 &#039;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>remote_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#039; \u4e0d\u5b58\u5728\u6216\u65e0\u6cd5\u8bbf\u95ee\u3002\u9519\u8bef: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span><\/p>\n<p>        module_dir <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>local_base_dir<span class=\"token punctuation\">,<\/span> module_name<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> is_directory<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token comment\"># \u5982\u679c\u662f\u6587\u4ef6\u5939&#xff0c;\u672c\u5730\u8def\u5f84\u662f downloads\/&lt;\u6a21\u5757\u540d&gt;\/&lt;\u81ea\u5b9a\u4e49\u540d\u6216\u8fdc\u7a0b\u76ee\u5f55\u540d&gt;<\/span><br \/>\n            target_dir_name <span class=\"token operator\">&#061;<\/span> local_name <span class=\"token keyword\">or<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>basename<span class=\"token punctuation\">(<\/span>remote_path_cleaned<span class=\"token punctuation\">.<\/span>rstrip<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\/&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            local_path <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>module_dir<span class=\"token punctuation\">,<\/span> target_dir_name<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u4ece &#039;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\/<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>share_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\/<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>remote_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#039; \u4e0b\u8f7d\u6587\u4ef6\u5939\u5230 &#039;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>local_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\\\\\\\&#039;&#8230;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            _download_samba_directory<span class=\"token punctuation\">(<\/span>conn<span class=\"token punctuation\">,<\/span> share_name<span class=\"token punctuation\">,<\/span> remote_path_cleaned<span class=\"token punctuation\">,<\/span> local_path<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u2705 \u6587\u4ef6\u5939 &#039;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>remote_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#039; \u4e0b\u8f7d\u5b8c\u6210&#xff01;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            _write_download_info<span class=\"token punctuation\">(<\/span>ip<span class=\"token punctuation\">,<\/span> share_name<span class=\"token punctuation\">,<\/span> remote_path<span class=\"token punctuation\">,<\/span> local_path<span class=\"token punctuation\">,<\/span> username<span class=\"token punctuation\">,<\/span> module_name<span class=\"token punctuation\">,<\/span> is_directory<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token comment\"># \u5982\u679c\u662f\u6587\u4ef6&#xff0c;\u672c\u5730\u8def\u5f84\u662f downloads\/&lt;\u6a21\u5757\u540d&gt;\/&lt;\u81ea\u5b9a\u4e49\u540d\u6216\u6587\u4ef6\u540d&gt;<\/span><br \/>\n            file_name <span class=\"token operator\">&#061;<\/span> local_name <span class=\"token keyword\">or<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>basename<span class=\"token punctuation\">(<\/span>remote_path_cleaned<span class=\"token punctuation\">)<\/span><br \/>\n            local_path <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>module_dir<span class=\"token punctuation\">,<\/span> file_name<span class=\"token punctuation\">)<\/span><\/p>\n<p>            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u4ece &#039;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\/<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>share_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\/<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>remote_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#039; \u4e0b\u8f7d\u6587\u4ef6\u5230 &#039;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>local_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#039;&#8230;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            os<span class=\"token punctuation\">.<\/span>makedirs<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>dirname<span class=\"token punctuation\">(<\/span>local_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> exist_ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>local_path<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;wb&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> local_file<span class=\"token punctuation\">:<\/span><br \/>\n                conn<span class=\"token punctuation\">.<\/span>retrieveFile<span class=\"token punctuation\">(<\/span>share_name<span class=\"token punctuation\">,<\/span> smb_remote_path<span class=\"token punctuation\">,<\/span> local_file<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u2705 \u6587\u4ef6 &#039;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>remote_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#039; \u4e0b\u8f7d\u5b8c\u6210&#xff01;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            _write_download_info<span class=\"token punctuation\">(<\/span>ip<span class=\"token punctuation\">,<\/span> share_name<span class=\"token punctuation\">,<\/span> remote_path<span class=\"token punctuation\">,<\/span> local_path<span class=\"token punctuation\">,<\/span> username<span class=\"token punctuation\">,<\/span> module_name<span class=\"token punctuation\">,<\/span> is_directory<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">except<\/span> OperationFailure <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token comment\"># \u6355\u83b7\u66f4\u5177\u4f53\u7684Samba\u64cd\u4f5c\u5931\u8d25&#xff0c;\u4f8b\u5982\u8ba4\u8bc1\u5931\u8d25\u6216\u6743\u9650\u4e0d\u8db3<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> e<span class=\"token punctuation\">.<\/span>ntStatus <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0xC0000022<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token comment\"># STATUS_ACCESS_DENIED<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c Samba\u6743\u9650\u4e0d\u8db3\u6216\u8ba4\u8bc1\u5931\u8d25&#xff1a;\u8bf7\u68c0\u67e5config.yaml\u4e2d\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801&#xff0c;\u4ee5\u53caSamba\u670d\u52a1\u5668\u4e0a\u7684\u7528\u6237\u6743\u9650\u3002\u9519\u8bef: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">elif<\/span> <span class=\"token string\">&#034;LOGON_FAILURE&#034;<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c Samba\u8ba4\u8bc1\u5931\u8d25&#xff1a;\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef\u3002\u8bf7\u68c0\u67e5config.yaml\u914d\u7f6e\u3002\u9519\u8bef: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c Samba\u64cd\u4f5c\u5931\u8d25&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#xff0c;\u8bf7\u68c0\u67e5\u8fdc\u7a0b\u8def\u5f84\u662f\u5426\u5b58\u5728\u6216\u6743\u9650\u3002&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u26a0\ufe0f \u83b7\u53d6\u6587\u4ef6\/\u6587\u4ef6\u5939\u65f6\u53d1\u751f\u672a\u77e5\u9519\u8bef&#xff1a;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">finally<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> conn<span class=\"token punctuation\">:<\/span><br \/>\n            conn<span class=\"token punctuation\">.<\/span>close<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">_download_samba_directory<\/span><span class=\"token punctuation\">(<\/span>conn<span class=\"token punctuation\">,<\/span> share_name<span class=\"token punctuation\">,<\/span> remote_dir<span class=\"token punctuation\">,<\/span> local_dir<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    os<span class=\"token punctuation\">.<\/span>makedirs<span class=\"token punctuation\">(<\/span>local_dir<span class=\"token punctuation\">,<\/span> exist_ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    file_list <span class=\"token operator\">&#061;<\/span> conn<span class=\"token punctuation\">.<\/span>listPath<span class=\"token punctuation\">(<\/span>share_name<span class=\"token punctuation\">,<\/span> remote_dir<span class=\"token punctuation\">.<\/span>replace<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>sep<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;\/&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> f <span class=\"token keyword\">in<\/span> file_list<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> f<span class=\"token punctuation\">.<\/span>filename <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;.&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;..&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">continue<\/span><br \/>\n        current_remote_path <span class=\"token operator\">&#061;<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f&#034;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>remote_dir<span class=\"token punctuation\">.<\/span>rstrip<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\/&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\/<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>f<span class=\"token punctuation\">.<\/span>filename<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><br \/>\n        current_local_path <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>local_dir<span class=\"token punctuation\">,<\/span> f<span class=\"token punctuation\">.<\/span>filename<span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> f<span class=\"token punctuation\">.<\/span>isDirectory<span class=\"token punctuation\">:<\/span><br \/>\n            _download_samba_directory<span class=\"token punctuation\">(<\/span>conn<span class=\"token punctuation\">,<\/span> share_name<span class=\"token punctuation\">,<\/span> current_remote_path<span class=\"token punctuation\">,<\/span> current_local_path<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;      \u4e0b\u8f7d\u6587\u4ef6: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>current_remote_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> -&gt; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>current_local_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            os<span class=\"token punctuation\">.<\/span>makedirs<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>dirname<span class=\"token punctuation\">(<\/span>current_local_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> exist_ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>current_local_path<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;wb&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> local_file<span class=\"token punctuation\">:<\/span><br \/>\n                conn<span class=\"token punctuation\">.<\/span>retrieveFile<span class=\"token punctuation\">(<\/span>share_name<span class=\"token punctuation\">,<\/span> current_remote_path<span class=\"token punctuation\">.<\/span>replace<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>sep<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;\/&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> local_file<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">_write_download_info<\/span><span class=\"token punctuation\">(<\/span>ip<span class=\"token punctuation\">,<\/span> share_name<span class=\"token punctuation\">,<\/span> remote_path<span class=\"token punctuation\">,<\/span> local_path<span class=\"token punctuation\">,<\/span> username<span class=\"token punctuation\">,<\/span> module_name<span class=\"token punctuation\">,<\/span> is_directory<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u5c06\u4e0b\u8f7d\u4fe1\u606f\u5199\u5165\u6587\u4ef6\/\u6587\u4ef6\u5939\u7684\u540c\u7ea7\u76ee\u5f55&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> is_directory<span class=\"token punctuation\">:<\/span><br \/>\n        info_dir <span class=\"token operator\">&#061;<\/span> local_path<br \/>\n    <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        info_dir <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>dirname<span class=\"token punctuation\">(<\/span>local_path<span class=\"token punctuation\">)<\/span><\/p>\n<p>    os<span class=\"token punctuation\">.<\/span>makedirs<span class=\"token punctuation\">(<\/span>info_dir<span class=\"token punctuation\">,<\/span> exist_ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    download_info_file <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>info_dir<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;info.txt&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u4f7f\u7528\u8ffd\u52a0\u6a21\u5f0f&#xff0c;\u6bcf\u6b21\u4e0b\u8f7d\u90fd\u6dfb\u52a0\u4fe1\u606f<\/span><br \/>\n    <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>download_info_file<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;a&#039;<\/span><span class=\"token punctuation\">,<\/span> encoding<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;utf-8&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span><br \/>\n        f<span class=\"token punctuation\">.<\/span>write<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;[\u4e0b\u8f7d\u4fe1\u606f &#8211; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>datetime<span class=\"token punctuation\">.<\/span>now<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>strftime<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;%Y-%m-%d %H:%M:%S&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">]\\\\n&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        f<span class=\"token punctuation\">.<\/span>write<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u8fdc\u7a0b IP: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ip<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\\\n&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        f<span class=\"token punctuation\">.<\/span>write<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;Samba \u5171\u4eab\u540d: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>share_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\\\n&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        f<span class=\"token punctuation\">.<\/span>write<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u8fdc\u7a0b\u8def\u5f84: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>remote_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\\\n&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        f<span class=\"token punctuation\">.<\/span>write<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u672c\u5730\u4fdd\u5b58\u8def\u5f84: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>local_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\\\n&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        f<span class=\"token punctuation\">.<\/span>write<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u6a21\u5757: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>module_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\\\n&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        f<span class=\"token punctuation\">.<\/span>write<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u7528\u6237\u540d: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>username<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\\\n&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        f<span class=\"token punctuation\">.<\/span>write<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;-&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">30<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061; \u8bbe\u5907\u8fde\u63a5\u5de5\u5177 &#061;&#061;&#061;&#061;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    check_environment<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token comment\"># \u8bfb\u53d6\u8bbe\u5907\u914d\u7f6e&#xff08;\u5305\u542bIP\u53ca\u5173\u8054\u53c2\u6570&#xff09;<\/span><br \/>\n    devices <span class=\"token operator\">&#061;<\/span> read_device_config<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">while<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>devices<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            selected_device <span class=\"token operator\">&#061;<\/span> devices<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><br \/>\n            <span class=\"token comment\"># \u5982\u679c\u662f\u5355\u8bbe\u5907&#xff0c;\u8df3\u8fc7\u8bbe\u5907\u9009\u62e9\u63d0\u793a&#xff0c;\u4f46\u4ecd\u8fdb\u884c\u8fde\u901a\u6027\u68c0\u6d4b<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\\\\n\u6b63\u5728\u68c0\u6d4b <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;ip&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u8fde\u901a\u6027&#8230;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> ping_ip<span class=\"token punctuation\">(<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;ip&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                function_menu<span class=\"token punctuation\">(<\/span>selected_device<span class=\"token punctuation\">,<\/span> is_single_device<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token comment\"># \u5982\u679c\u4ecefunction_menu\u8fd4\u56de&#xff08;\u7528\u6237\u9009\u62e9\u4e86\u8fd4\u56de\u8bbe\u5907\u9009\u62e9\u754c\u9762&#xff09;&#xff0c;\u4e14\u53ea\u6709\u4e00\u4e2a\u8bbe\u5907&#xff0c;\u5219\u9000\u51fa<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#x1f44b; \u811a\u672c\u9000\u51fa&#xff0c;\u518d\u89c1&#xff01;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;ip&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u8fde\u63a5\u5931\u8d25&#xff08;ping\u4e0d\u901a&#xff09;&#xff0c;\u811a\u672c\u9000\u51fa\u3002&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n                sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token comment\"># \u591a\u4e2a\u8bbe\u5907&#xff0c;\u9700\u8981\u7528\u6237\u9009\u62e9<\/span><br \/>\n            selected_device <span class=\"token operator\">&#061;<\/span> select_device<span class=\"token punctuation\">(<\/span>devices<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\\\\n\u6b63\u5728\u68c0\u6d4b <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;ip&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u8fde\u901a\u6027&#8230;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> ping_ip<span class=\"token punctuation\">(<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;ip&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                function_menu<span class=\"token punctuation\">(<\/span>selected_device<span class=\"token punctuation\">,<\/span> is_single_device<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token comment\"># \u5982\u679c\u4ecefunction_menu\u8fd4\u56de&#xff08;\u7528\u6237\u9009\u62e9\u4e86\u8fd4\u56de\u8bbe\u5907\u9009\u62e9\u754c\u9762&#xff09;&#xff0c;\u5219\u7ee7\u7eed\u5916\u5c42\u5faa\u73af&#xff0c;\u8ba9\u7528\u6237\u91cd\u65b0\u9009\u62e9\u8bbe\u5907<\/span><br \/>\n            <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u274c <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>selected_device<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;ip&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u8fde\u63a5\u5931\u8d25&#xff08;ping\u4e0d\u901a&#xff09;&#xff0c;\u8bf7\u91cd\u65b0\u9009\u62e9&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;__main__&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    main<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<h4>2. \u521b\u5efa\u914d\u7f6e\u6587\u4ef6&#xff1a;config.yaml<\/h4>\n<p>\u521b\u5efa\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u7684 config.yaml \u6587\u4ef6&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u914d\u7f6e\u8303\u4f8b\u8bf4\u660e&#xff08;\u65b0\u624b\u53cb\u597d&#xff09;&#xff1a;<\/span><br \/>\n<span class=\"token comment\"># &#8211; module_templates: \u590d\u7528\u7684\u6a21\u5757\u6a21\u677f&#xff0c;\u951a\u70b9\u540d\u4ee5 &amp; \u5f00\u5934&#xff0c;\u5f15\u7528\u65f6\u7528 * \u951a\u70b9\u540d<\/span><br \/>\n<span class=\"token comment\">#   &#8211; name: \u6a21\u5757\u540d&#xff08;\u540c\u65f6\u4f5c\u4e3a\u672c\u5730\u4e0b\u8f7d\u7684\u9876\u5c42\u76ee\u5f55&#xff09;<\/span><br \/>\n<span class=\"token comment\">#   &#8211; items: \u8981\u4e0b\u8f7d\u7684\u6587\u4ef6\/\u76ee\u5f55\u5217\u8868<\/span><br \/>\n<span class=\"token comment\">#     &#8211; path: \u8fdc\u7a0b\u8def\u5f84&#xff08;\u76f8\u5bf9 Samba \u5171\u4eab\u6839&#xff09;<\/span><br \/>\n<span class=\"token comment\">#     &#8211; local_name: \u53ef\u9009&#xff0c;\u81ea\u5b9a\u4e49\u4e0b\u8f7d\u5230\u672c\u5730\u7684\u6587\u4ef6\/\u76ee\u5f55\u540d&#xff08;\u4e0d\u586b\u5219\u7528\u8fdc\u7a0b basename&#xff09;<\/span><br \/>\n<span class=\"token comment\"># &#8211; devices: \u8bbe\u5907\u5217\u8868<\/span><br \/>\n<span class=\"token comment\">#   &#8211; ip: \u8bbe\u5907 IP<\/span><br \/>\n<span class=\"token comment\">#   &#8211; share_name: Samba \u5171\u4eab\u540d<\/span><br \/>\n<span class=\"token comment\">#   &#8211; username\/password: \u767b\u5f55\u51ed\u636e<\/span><br \/>\n<span class=\"token comment\">#   &#8211; modules: \u6b64\u8bbe\u5907\u8981\u4e0b\u8f7d\u7684\u6a21\u5757&#xff1b;\u53ef\u76f4\u63a5\u5199\u6a21\u5757\u5b9a\u4e49&#xff0c;\u4e5f\u53ef\u5f15\u7528\u6a21\u677f&#xff08;\u5982 *graphic&#xff09;<\/span><br \/>\n<span class=\"token key atrule\">module_templates<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token comment\"># \u5982\u4e0b\u8f7d\u76ee\u5f55&#xff0c;\u5219 name \u53ef\u8bbe\u4e3a\u76ee\u5f55\u7236\u7ea7&#xff1b;\u5982\u4e0b\u8f7d\u6587\u4ef6&#xff0c;\u5219 name \u53ef\u8bbe\u4e3a\u6587\u4ef6\u7236\u76ee\u5f55<\/span><br \/>\n  <span class=\"token key atrule\">xwdvk_d2000_small<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token important\">&amp;xwdvk_d2000_small<\/span><br \/>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> xwdvk_d2000_small<br \/>\n    <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 0\/litea\/out\/xwdvk_d2000_small\/xwdvk_d2000_small\/usr\/lib\/libavfilter.so<br \/>\n        <span class=\"token key atrule\">local_name<\/span><span class=\"token punctuation\">:<\/span> libavfilter.so<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 0\/litea\/out\/xwdvk_d2000_small\/xwdvk_d2000_small\/bin\/opdemo_demo<br \/>\n        <span class=\"token key atrule\">local_name<\/span><span class=\"token punctuation\">:<\/span> opdemo_demo.bin<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 0\/litea\/out\/xwdvk_d2000_small\/xwdvk_d2000_small\/rootfs\/lib\/libc.so<br \/>\n        <span class=\"token key atrule\">local_name<\/span><span class=\"token punctuation\">:<\/span> libc.so<br \/>\n  <span class=\"token key atrule\">graphic<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token important\">&amp;graphic<\/span><br \/>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> graphic<br \/>\n    <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 633\/out\/arm64\/targets\/graphic\/graphic_2d\/<br \/>\n        <span class=\"token comment\"># local_name: graphic_2d    # \u53ef\u9009&#xff1a;\u6307\u5b9a\u672c\u5730\u76ee\u5f55\u540d<\/span><br \/>\n  <span class=\"token key atrule\">multimedia<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token important\">&amp;multimedia<\/span><br \/>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> multimedia<br \/>\n    <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 633\/out\/arm64\/targets\/multimedia\/camera_framework\/<br \/>\n        <span class=\"token comment\"># local_name: camera_framework<\/span><br \/>\n  <span class=\"token key atrule\">audio_framework<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token important\">&amp;audio_framework<\/span><br \/>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> audio_framework<br \/>\n    <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 001\/out\/tr12\/multimedia\/audio_framework\/libaudio_service.z.so<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 001\/out\/tr12\/multimedia\/audio_framework\/libaudio_policy_service.z.so<br \/>\n  <span class=\"token key atrule\">kh_distributed_input<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token important\">&amp;kh_distributed_input<\/span><br \/>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> distributedhardware<br \/>\n    <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 001\/out\/arm64\/targets\/kh_distributed\/kh_distributed_screen_input\/<br \/>\n  <span class=\"token key atrule\">kh_distributed_screen<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token important\">&amp;kh_distributed_screen<\/span><br \/>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> distributedhardware<br \/>\n    <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 001\/out\/arm64\/targets\/kh_distributed\/kh_distributed_screen\/<br \/>\n  <span class=\"token key atrule\">633camera<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token important\">&amp;633camera<\/span><br \/>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> 633camera<br \/>\n    <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 633\/out\/arm64\/targets\/hdf\/drivers_peripheral_camera\/libusb_camera_pipeline_core.z.so<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 633\/out\/arm64\/targets\/hdf\/drivers_peripheral_camera\/libcamera_daemon.so<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 633\/out\/arm64\/targets\/multimedia\/camera_framework\/libcamera_service.z.so<br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> 633\/out\/arm64\/targets\/graphic\/graphic_2d\/librender_service.z.so<\/p>\n<p><span class=\"token key atrule\">devices<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">ip<\/span><span class=\"token punctuation\">:<\/span> 192.168.16.17<br \/>\n    <span class=\"token key atrule\">share_name<\/span><span class=\"token punctuation\">:<\/span> shared_folder_17<br \/>\n    <span class=\"token key atrule\">username<\/span><span class=\"token punctuation\">:<\/span> root<br \/>\n    <span class=\"token key atrule\">password<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">123456<\/span><br \/>\n    <span class=\"token key atrule\">modules<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> kh_edgecomputing_thing_accessmanager_meta<br \/>\n        <span class=\"token key atrule\">items<\/span><span class=\"token punctuation\">:<\/span><br \/>\n          <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> kh5.0.1\/out\/arm64\/targets\/kh_edgecomputing\/kh_edgecomputing_thing_accessmanager_meta\/libnanning_subway_handler.z.so<br \/>\n            <span class=\"token comment\"># local_name: \u81ea\u5b9a\u4e49\u672c\u5730\u6587\u4ef6\u540d&#xff0c;\u53ef\u9009<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token important\">*kh_distributed_screen<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token important\">*kh_distributed_input<\/span><\/p>\n<p>  <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">ip<\/span><span class=\"token punctuation\">:<\/span> 192.168.16.40<br \/>\n    <span class=\"token key atrule\">share_name<\/span><span class=\"token punctuation\">:<\/span> shared_folder_40<br \/>\n    <span class=\"token key atrule\">username<\/span><span class=\"token punctuation\">:<\/span> root<br \/>\n    <span class=\"token key atrule\">password<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">123456<\/span><br \/>\n    <span class=\"token key atrule\">modules<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token comment\">#- *graphic<\/span><br \/>\n      <span class=\"token comment\">#- *multimedia<\/span><br \/>\n      <span class=\"token comment\">#- *audio_framework<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token important\">*633camera<\/span><\/p>\n<h4>3. \u521b\u5efa\u542f\u52a8\u811a\u672c&#xff1a;run.bat<\/h4>\n<p>\u521b\u5efa\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u7684 run.bat \u6587\u4ef6&#xff1a;<\/p>\n<p>&#064;echo off<br \/>\nchcp 65001 &gt;nul 2&gt;&amp;1<br \/>\nset &#034;PYTHONUTF8&#061;1&#034;<br \/>\nset &#034;PYTHONIOENCODING&#061;utf-8&#034;<\/p>\n<p>set &#034;script_dir&#061;%~dp0&#034;<br \/>\nset &#034;py_script&#061;%script_dir%scripts\\\\samba_downloader.py&#034;<\/p>\n<p>if not exist &#034;%py_script%&#034; (<br \/>\n    echo ERROR: samba_downloader.py not found in current folder.<br \/>\n    pause<br \/>\n    exit \/b 1<br \/>\n)<\/p>\n<p>where python &gt;nul 2&gt;&amp;1<br \/>\nif %errorlevel% equ 0 (<br \/>\n    set &#034;python_cmd&#061;python&#034;<br \/>\n) else (<br \/>\n    where python3 &gt;nul 2&gt;&amp;1<br \/>\n    if %errorlevel% equ 0 (<br \/>\n        set &#034;python_cmd&#061;python3&#034;<br \/>\n    ) else (<br \/>\n        echo ERROR: Python not found. Install Python and add to PATH.<br \/>\n        echo Download: https:\/\/www.python.org\/downloads\/<br \/>\n        pause<br \/>\n        exit \/b 1<br \/>\n    )<br \/>\n)<\/p>\n<p>echo Starting samba_downloader.py &#8230;<br \/>\necho &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n&#034;%python_cmd%&#034; &#034;%py_script%&#034;<\/p>\n<p>echo &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\necho Script finished. Press any key to exit&#8230;<br \/>\npause &gt;nul<\/p>\n<h4>\u6587\u4ef6\u521b\u5efa\u6b65\u9aa4<\/h4>\n<li>\n<p>\u521b\u5efa\u76ee\u5f55\u7ed3\u6784&#xff1a;<\/p>\n<p> <span class=\"token function\">mkdir<\/span> scripts<br \/>\n<span class=\"token function\">mkdir<\/span> doc\n <\/li>\n<li>\n<p>\u521b\u5efa\u6587\u4ef6&#xff1a;<\/p>\n<ul>\n<li>\u5c06\u4e0a\u8ff0\u7b2c\u4e00\u4e2a\u4ee3\u7801\u5757\u5185\u5bb9\u4fdd\u5b58\u4e3a scripts\/samba_downloader.py<\/li>\n<li>\u5c06\u4e0a\u8ff0\u7b2c\u4e8c\u4e2a\u4ee3\u7801\u5757\u5185\u5bb9\u4fdd\u5b58\u4e3a config.yaml<\/li>\n<li>\u5c06\u4e0a\u8ff0\u7b2c\u4e09\u4e2a\u4ee3\u7801\u5757\u5185\u5bb9\u4fdd\u5b58\u4e3a run.bat<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u5b89\u88c5\u4f9d\u8d56&#xff1a;<\/p>\n<p> python -m pip <span class=\"token function\">install<\/span> PyYAML pysmb\n <\/li>\n<li>\n<p>\u8fd0\u884c\u811a\u672c&#xff1a; \u53cc\u51fb run.bat \u542f\u52a8\u5de5\u5177<\/p>\n<\/li>\n<h3>\u66f4\u65b0\u65e5\u5fd7<\/h3>\n<ul>\n<li>v1.0&#xff1a;\u521d\u59cb\u7248\u672c&#xff0c;\u652f\u6301\u57fa\u672c\u4e0b\u8f7d\u529f\u80fd\u548c YAML \u914d\u7f6e<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u4ece Samba \u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177<br \/>\n\u542f\u7528samba<br \/>\n\u9879\u76ee\u6982\u8ff0<br \/>\n\u8fd9\u662f\u4e00\u4e2a\u7528\u4e8e\u4ece Samba \u5171\u4eab\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\/\u6587\u4ef6\u5939\u7684\u5de5\u5177&#xff0c;\u652f\u6301\u6279\u91cf\u4e0b\u8f7d\u3001\u6a21\u5757\u5316\u914d\u7f6e\u548c\u81ea\u5b9a\u4e49\u672c\u5730\u76ee\u5f55\u7ed3\u6784\u3002<br \/>\n\u9879\u76ee\u7ed3\u6784<br \/>\nget-samba-file\/<br \/>\n\u251c\u2500\u2500 config.yaml                    # \u914d\u7f6e\u6587\u4ef6&#xff08;YAML\u683c\u5f0f&#xff09;<br \/>\n\u251c\u2500\u2500 run.bat                        # Windows \u542f\u52a8\u811a\u672c<br \/>\n\u251c\u2500\u2500 scr<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[106,43],"topic":[],"class_list":["post-77290","post","type-post","status-publish","format-standard","hentry","category-server","tag-samba","tag-43"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4ecesamba\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/77290.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4ecesamba\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u4ece Samba \u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177 \u542f\u7528samba \u9879\u76ee\u6982\u8ff0 \u8fd9\u662f\u4e00\u4e2a\u7528\u4e8e\u4ece Samba \u5171\u4eab\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\/\u6587\u4ef6\u5939\u7684\u5de5\u5177&#xff0c;\u652f\u6301\u6279\u91cf\u4e0b\u8f7d\u3001\u6a21\u5757\u5316\u914d\u7f6e\u548c\u81ea\u5b9a\u4e49\u672c\u5730\u76ee\u5f55\u7ed3\u6784\u3002 \u9879\u76ee\u7ed3\u6784 get-samba-file\/ \u251c\u2500\u2500 config.yaml          # \u914d\u7f6e\u6587\u4ef6&#xff08;YAML\u683c\u5f0f&#xff09; \u251c\u2500\u2500 run.bat            # Windows \u542f\u52a8\u811a\u672c \u251c\u2500\u2500 scr\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/77290.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-24T02:49:50+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/77290.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/77290.html\",\"name\":\"\u4ecesamba\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-02-24T02:49:50+00:00\",\"dateModified\":\"2026-02-24T02:49:50+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/77290.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/77290.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/77290.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4ecesamba\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u4ecesamba\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/77290.html","og_locale":"zh_CN","og_type":"article","og_title":"\u4ecesamba\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u4ece Samba \u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177 \u542f\u7528samba \u9879\u76ee\u6982\u8ff0 \u8fd9\u662f\u4e00\u4e2a\u7528\u4e8e\u4ece Samba \u5171\u4eab\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\/\u6587\u4ef6\u5939\u7684\u5de5\u5177&#xff0c;\u652f\u6301\u6279\u91cf\u4e0b\u8f7d\u3001\u6a21\u5757\u5316\u914d\u7f6e\u548c\u81ea\u5b9a\u4e49\u672c\u5730\u76ee\u5f55\u7ed3\u6784\u3002 \u9879\u76ee\u7ed3\u6784 get-samba-file\/ \u251c\u2500\u2500 config.yaml          # \u914d\u7f6e\u6587\u4ef6&#xff08;YAML\u683c\u5f0f&#xff09; \u251c\u2500\u2500 run.bat            # Windows \u542f\u52a8\u811a\u672c \u251c\u2500\u2500 scr","og_url":"https:\/\/www.wsisp.com\/helps\/77290.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-02-24T02:49:50+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"14 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/77290.html","url":"https:\/\/www.wsisp.com\/helps\/77290.html","name":"\u4ecesamba\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-02-24T02:49:50+00:00","dateModified":"2026-02-24T02:49:50+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/77290.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/77290.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/77290.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u4ecesamba\u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6\u5de5\u5177"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/77290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=77290"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/77290\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=77290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=77290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=77290"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=77290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}