最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python執(zhí)行Linux命令的多種方法

 更新時間:2025年12月31日 09:30:02   作者:江上清風山間明月  
本文介紹了在Python中執(zhí)行shell命令(如cd和git)的多種方法,包括使用os和subprocess模塊、完整的最佳實踐解決方案、高級Git操作封裝、最簡實現(xiàn)以及錯誤處理、路徑擴展和安全性注意事項,最后,簡要介紹了Flutter的開發(fā)背景和學(xué)習(xí)重點,需要的朋友可以參考下

Python 實現(xiàn)shell腳本各種命令有多種方法,下面我將以 cd 和 git 命令為例子詳細介紹幾種常用的方式:

一、使用os和subprocess模塊(推薦)

1. 基礎(chǔ)方法

import os
import subprocess

# 方法1:分別執(zhí)行
def git_branches_separate():
    """分別執(zhí)行cd和git命令"""
    try:
        # 1. 改變工作目錄
        os.chdir("~/GoogleTV5/gitfromMTK/device/changhong/hakata")
        print(f"當前目錄: {os.getcwd()}")
        
        # 2. 執(zhí)行g(shù)it命令
        result = subprocess.run(
            ["git", "branch", "-a"],
            capture_output=True,
            text=True
        )
        
        print("Git分支列表:")
        print(result.stdout)
        
        if result.stderr:
            print(f"錯誤信息: {result.stderr}")
            
    except FileNotFoundError as e:
        print(f"目錄不存在: {e}")
    except Exception as e:
        print(f"執(zhí)行錯誤: {e}")

# 使用
git_branches_separate()

2. 使用 shell 的 cd 命令(不推薦)

import subprocess

def git_branches_with_shell():
    """使用shell執(zhí)行復(fù)合命令"""
    try:
        # 使用shell=True執(zhí)行復(fù)合命令
        result = subprocess.run(
            "cd ~/GoogleTV5/gitfromMTK/device/changhong/hakata && git branch -a",
            shell=True,
            capture_output=True,
            text=True
        )
        
        print("Git分支列表:")
        print(result.stdout)
        
        if result.returncode != 0:
            print(f"命令執(zhí)行失敗: {result.stderr}")
            
    except Exception as e:
        print(f"執(zhí)行錯誤: {e}")

# 使用
git_branches_with_shell()

二、完整的最佳實踐解決方案

1. 帶錯誤處理和路徑擴展的版本

import os
import subprocess
from pathlib import Path

class GitRepository:
    """Git倉庫操作類"""
    
    def __init__(self, repo_path=None):
        """
        初始化Git倉庫對象
        
        Args:
            repo_path: 倉庫路徑,支持相對路徑、絕對路徑和~擴展
        """
        self.original_dir = os.getcwd()
        self.repo_path = self._expand_path(repo_path) if repo_path else None
    
    def _expand_path(self, path):
        """展開路徑,支持~和變量"""
        # 展開用戶目錄 ~
        path = os.path.expanduser(path)
        # 展開環(huán)境變量
        path = os.path.expandvars(path)
        # 獲取絕對路徑
        return os.path.abspath(path)
    
    def change_directory(self, path):
        """改變工作目錄"""
        try:
            expanded_path = self._expand_path(path)
            
            if not os.path.exists(expanded_path):
                raise FileNotFoundError(f"目錄不存在: {expanded_path}")
            
            if not os.path.isdir(expanded_path):
                raise NotADirectoryError(f"不是目錄: {expanded_path}")
            
            os.chdir(expanded_path)
            print(f"? 切換到目錄: {os.getcwd()}")
            self.repo_path = expanded_path
            return True
            
        except Exception as e:
            print(f"? 切換目錄失敗: {e}")
            return False
    
    def run_git_command(self, command, capture_output=True):
        """
        執(zhí)行g(shù)it命令
        
        Args:
            command: git命令,如 ["branch", "-a"] 或 "branch -a"
            capture_output: 是否捕獲輸出
        """
        try:
            # 確保在正確的目錄
            if self.repo_path and os.getcwd() != self.repo_path:
                self.change_directory(self.repo_path)
            
            # 處理命令格式
            if isinstance(command, str):
                git_cmd = ["git"] + command.split()
            else:
                git_cmd = ["git"] + list(command)
            
            # 執(zhí)行命令
            result = subprocess.run(
                git_cmd,
                capture_output=capture_output,
                text=True,
                encoding='utf-8'
            )
            
            return {
                'success': result.returncode == 0,
                'returncode': result.returncode,
                'stdout': result.stdout if capture_output else None,
                'stderr': result.stderr if capture_output else None,
                'command': ' '.join(git_cmd)
            }
            
        except FileNotFoundError:
            return {
                'success': False,
                'error': 'git命令未找到,請確保已安裝Git',
                'command': ' '.join(git_cmd) if 'git_cmd' in locals() else 'git'
            }
        except Exception as e:
            return {
                'success': False,
                'error': str(e),
                'command': ' '.join(git_cmd) if 'git_cmd' in locals() else 'git'
            }
    
    def list_branches(self, show_all=True):
        """列出分支"""
        command = ["branch", "-a"] if show_all else ["branch"]
        return self.run_git_command(command)
    
    def get_current_branch(self):
        """獲取當前分支"""
        result = self.run_git_command(["branch", "--show-current"])
        if result['success'] and result['stdout']:
            return result['stdout'].strip()
        return None
    
    def get_status(self):
        """獲取倉庫狀態(tài)"""
        return self.run_git_command(["status"])
    
    def restore_directory(self):
        """恢復(fù)原始目錄"""
        os.chdir(self.original_dir)
        print(f"?? 恢復(fù)到原始目錄: {self.original_dir}")
    
    def __enter__(self):
        """上下文管理器入口"""
        return self
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        """上下文管理器退出"""
        self.restore_directory()

# 使用示例
def main():
    # 方法1:直接使用
    repo = GitRepository()
    
    # 切換目錄
    if repo.change_directory("~/GoogleTV5/gitfromMTK/device/changhong/hakata"):
        # 列出所有分支
        result = repo.list_branches(show_all=True)
        
        if result['success']:
            print("? Git分支列表:")
            print(result['stdout'])
            
            # 獲取當前分支
            current_branch = repo.get_current_branch()
            if current_branch:
                print(f"?? 當前分支: {current_branch}")
        else:
            print(f"? 執(zhí)行失敗: {result.get('error', '未知錯誤')}")
            if result.get('stderr'):
                print(f"錯誤信息: {result['stderr']}")
    
    # 恢復(fù)原始目錄
    repo.restore_directory()
    
    print("\n" + "="*50 + "\n")
    
    # 方法2:使用上下文管理器(推薦)
    repo_path = "~/GoogleTV5/gitfromMTK/device/changhong/hakata"
    
    with GitRepository(repo_path) as repo:
        # 在這個代碼塊中,會自動切換到指定目錄
        # 退出代碼塊時,會自動恢復(fù)原始目錄
        
        print(f"?? 當前在倉庫: {os.getcwd()}")
        
        # 執(zhí)行多個git命令
        result1 = repo.list_branches()
        if result1['success']:
            print("? 所有分支:")
            print(result1['stdout'])
        
        result2 = repo.get_status()
        if result2['success']:
            print("? 倉庫狀態(tài):")
            print(result2['stdout'])
        
        # 也可以執(zhí)行自定義git命令
        result3 = repo.run_git_command("log --oneline -5")
        if result3['success']:
            print("? 最近5次提交:")
            print(result3['stdout'])

if __name__ == "__main__":
    main()

2. 命令行工具版本

#!/usr/bin/env python3
"""
Git倉庫操作工具
用法: python git_tool.py [命令] [參數(shù)]
"""

import os
import subprocess
import argparse
import sys

def execute_in_directory(directory, command, use_shell=False):
    """
    在指定目錄執(zhí)行命令
    
    Args:
        directory: 目標目錄
        command: 要執(zhí)行的命令
        use_shell: 是否使用shell執(zhí)行
    """
    original_dir = os.getcwd()
    
    try:
        # 展開路徑
        directory = os.path.expanduser(directory)
        directory = os.path.expandvars(directory)
        
        # 檢查目錄是否存在
        if not os.path.exists(directory):
            print(f"錯誤: 目錄不存在 - {directory}")
            return False
        
        # 切換目錄
        os.chdir(directory)
        print(f"切換到: {os.getcwd()}")
        
        # 執(zhí)行命令
        if use_shell:
            # 使用shell執(zhí)行
            result = subprocess.run(
                command,
                shell=True,
                capture_output=True,
                text=True,
                encoding='utf-8'
            )
        else:
            # 不使用shell
            result = subprocess.run(
                command,
                capture_output=True,
                text=True,
                encoding='utf-8'
            )
        
        # 輸出結(jié)果
        if result.stdout:
            print(result.stdout)
        
        if result.stderr:
            print(f"錯誤: {result.stderr}", file=sys.stderr)
        
        # 返回是否成功
        return result.returncode == 0
        
    except Exception as e:
        print(f"執(zhí)行出錯: {e}", file=sys.stderr)
        return False
        
    finally:
        # 恢復(fù)原始目錄
        os.chdir(original_dir)

def main():
    parser = argparse.ArgumentParser(
        description='在指定目錄執(zhí)行Git命令',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
示例:
  %(prog)s ~/project git branch -a
  %(prog)s ~/project "git status"
  %(prog)s --shell ~/project "cd src && git log --oneline"
        """
    )
    
    parser.add_argument(
        'directory',
        help='要切換的目錄'
    )
    
    parser.add_argument(
        'command',
        nargs='+',
        help='要執(zhí)行的命令'
    )
    
    parser.add_argument(
        '--shell',
        action='store_true',
        help='使用shell執(zhí)行命令(支持&&等操作符)'
    )
    
    parser.add_argument(
        '--verbose',
        '-v',
        action='store_true',
        help='顯示詳細信息'
    )
    
    args = parser.parse_args()
    
    if args.verbose:
        print(f"目錄: {args.directory}")
        print(f"命令: {' '.join(args.command)}")
        print(f"使用shell: {args.shell}")
    
    # 如果是git命令且沒有指定shell,自動添加git前綴
    if not args.shell and args.command[0] != 'git':
        args.command = ['git'] + args.command
    
    command_str = ' '.join(args.command) if args.shell else args.command
    
    success = execute_in_directory(
        args.directory,
        command_str,
        use_shell=args.shell
    )
    
    sys.exit(0 if success else 1)

if __name__ == '__main__':
    main()

三、高級功能:完整的Git操作封裝

import os
import subprocess
import json
from datetime import datetime
from typing import List, Dict, Optional, Any

class AdvancedGitManager:
    """高級Git倉庫管理器"""
    
    def __init__(self, repo_path=None):
        self.repo_path = os.path.expanduser(repo_path) if repo_path else None
        self.original_dir = os.getcwd()
        
        if self.repo_path and not os.path.exists(self.repo_path):
            raise FileNotFoundError(f"倉庫目錄不存在: {self.repo_path}")
    
    def _ensure_in_repo(self):
        """確保在正確的倉庫目錄"""
        if not self.repo_path:
            raise ValueError("未指定倉庫路徑")
        
        if os.getcwd() != self.repo_path:
            os.chdir(self.repo_path)
    
    def _run_git(self, args, **kwargs):
        """執(zhí)行g(shù)it命令的通用方法"""
        self._ensure_in_repo()
        
        try:
            result = subprocess.run(
                ['git'] + args,
                capture_output=True,
                text=True,
                encoding='utf-8',
                **kwargs
            )
            
            return {
                'success': result.returncode == 0,
                'returncode': result.returncode,
                'stdout': result.stdout.strip(),
                'stderr': result.stderr.strip(),
                'command': 'git ' + ' '.join(args)
            }
        except Exception as e:
            return {
                'success': False,
                'error': str(e),
                'command': 'git ' + ' '.join(args)
            }
    
    def get_all_branches(self, verbose=False):
        """獲取所有分支(包括遠程分支)"""
        result = self._run_git(['branch', '-a'])
        
        if not result['success']:
            return result
        
        branches = []
        for line in result['stdout'].split('\n'):
            line = line.strip()
            if not line:
                continue
            
            # 解析分支信息
            is_current = line.startswith('*')
            is_remote = 'remotes/' in line
            
            if is_current:
                line = line[2:]  # 移除 "* "
            
            branch_info = {
                'name': line.replace('remotes/', '') if is_remote else line,
                'is_current': is_current,
                'is_remote': is_remote,
                'remote': None
            }
            
            # 解析遠程分支
            if is_remote:
                parts = line.split('/')
                if len(parts) >= 2:
                    branch_info['remote'] = parts[0]
                    branch_info['name'] = '/'.join(parts[1:])
            
            branches.append(branch_info)
        
        if verbose:
            print("?? 分支列表:")
            for branch in branches:
                prefix = "?? " if branch['is_current'] else "  "
                remote = f" ({branch['remote']})" if branch['is_remote'] else ""
                print(f"{prefix}{branch['name']}{remote}")
        
        return {
            'success': True,
            'branches': branches,
            'current': next((b for b in branches if b['is_current']), None),
            'local': [b for b in branches if not b['is_remote']],
            'remote': [b for b in branches if b['is_remote']]
        }
    
    def get_branch_info(self, branch_name=None):
        """獲取分支詳細信息"""
        if not branch_name:
            # 獲取當前分支
            result = self._run_git(['branch', '--show-current'])
            if not result['success']:
                return result
            branch_name = result['stdout']
        
        # 獲取最后提交信息
        log_result = self._run_git([
            'log', branch_name, '-1',
            '--format=%H|%an|%ae|%ad|%s',
            '--date=iso'
        ])
        
        if not log_result['success']:
            return log_result
        
        if log_result['stdout']:
            commit_hash, author, email, date, subject = log_result['stdout'].split('|', 4)
        else:
            commit_hash = author = email = date = subject = ''
        
        return {
            'success': True,
            'branch': branch_name,
            'last_commit': {
                'hash': commit_hash,
                'author': author,
                'email': email,
                'date': date,
                'subject': subject
            }
        }
    
    def switch_branch(self, branch_name, create_new=False):
        """切換分支"""
        if create_new:
            result = self._run_git(['checkout', '-b', branch_name])
        else:
            result = self._run_git(['checkout', branch_name])
        
        if result['success']:
            print(f"? 切換到分支: {branch_name}")
        
        return result
    
    def fetch_all(self):
        """獲取所有遠程更新"""
        result = self._run_git(['fetch', '--all'])
        
        if result['success']:
            print("? 已獲取所有遠程更新")
        
        return result
    
    def pull_current(self):
        """拉取當前分支更新"""
        result = self._run_git(['pull'])
        
        if result['success']:
            print("? 已拉取當前分支更新")
        
        return result
    
    def create_report(self, output_file=None):
        """生成倉庫報告"""
        report = {
            'timestamp': datetime.now().isoformat(),
            'repository': os.getcwd(),
            'branches': [],
            'status': {}
        }
        
        # 獲取分支信息
        branches_result = self.get_all_branches()
        if branches_result['success']:
            report['branches'] = branches_result
        
        # 獲取倉庫狀態(tài)
        status_result = self._run_git(['status', '--porcelain'])
        if status_result['success']:
            status_lines = status_result['stdout'].split('\n')
            report['status'] = {
                'modified': [],
                'added': [],
                'deleted': [],
                'untracked': []
            }
            
            for line in status_lines:
                if not line:
                    continue
                
                status = line[:2]
                filename = line[3:]
                
                if status == ' M':
                    report['status']['modified'].append(filename)
                elif status == 'A ' or status == 'M ':
                    report['status']['added'].append(filename)
                elif status == ' D':
                    report['status']['deleted'].append(filename)
                elif status == '??':
                    report['status']['untracked'].append(filename)
        
        # 寫入文件或返回
        if output_file:
            with open(output_file, 'w', encoding='utf-8') as f:
                if output_file.endswith('.json'):
                    json.dump(report, f, indent=2, ensure_ascii=False)
                else:
                    # 文本格式
                    f.write(f"Git倉庫報告\n")
                    f.write(f"生成時間: {report['timestamp']}\n")
                    f.write(f"倉庫路徑: {report['repository']}\n\n")
                    
                    f.write("分支信息:\n")
                    for branch in report['branches'].get('branches', []):
                        current = "*" if branch['is_current'] else " "
                        remote = f" [{branch.get('remote', 'local')}]" if branch['is_remote'] else ""
                        f.write(f"  {current} {branch['name']}{remote}\n")
                    
                    f.write("\n文件狀態(tài):\n")
                    for status_type, files in report['status'].items():
                        if files:
                            f.write(f"  {status_type}:\n")
                            for file in files:
                                f.write(f"    - {file}\n")
            
            print(f"? 報告已生成: {output_file}")
        
        return report
    
    def __enter__(self):
        """上下文管理器入口"""
        if self.repo_path:
            os.chdir(self.repo_path)
        return self
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        """上下文管理器退出"""
        os.chdir(self.original_dir)

# 使用示例
def advanced_example():
    repo_path = "~/GoogleTV5/gitfromMTK/device/changhong/hakata"
    
    try:
        # 使用上下文管理器
        with AdvancedGitManager(repo_path) as git:
            print(f"?? 當前倉庫: {os.getcwd()}")
            
            # 1. 獲取所有分支
            print("\n1. 獲取所有分支:")
            branches = git.get_all_branches(verbose=True)
            
            # 2. 獲取當前分支信息
            print("\n2. 當前分支信息:")
            current_branch = git.get_branch_info()
            if current_branch['success']:
                commit = current_branch['last_commit']
                print(f"   分支: {current_branch['branch']}")
                print(f"   最后提交: {commit['subject']}")
                print(f"   作者: {commit['author']}")
                print(f"   時間: {commit['date']}")
            
            # 3. 獲取遠程更新
            print("\n3. 獲取遠程更新:")
            git.fetch_all()
            
            # 4. 生成報告
            print("\n4. 生成倉庫報告:")
            git.create_report("git_report.json")
            
            # 5. 切換分支示例
            print("\n5. 切換到特定分支:")
            # 假設(shè)我們想切換到master分支
            # git.switch_branch("master")
            
    except FileNotFoundError as e:
        print(f"? 錯誤: {e}")
    except Exception as e:
        print(f"? 未知錯誤: {e}")

if __name__ == "__main__":
    advanced_example()

四、最簡實現(xiàn)(一行代碼)

如果你只需要最簡單的功能:

import os, subprocess
os.chdir(os.path.expanduser("~/GoogleTV5/gitfromMTK/device/changhong/hakata"))
subprocess.run(["git", "branch", "-a"])

五、總結(jié)與建議

推薦方案:

對于簡單需求:

import os
import subprocess

# 切換目錄
os.chdir(os.path.expanduser("~/GoogleTV5/gitfromMTK/device/changhong/hakata"))

# 執(zhí)行g(shù)it命令
result = subprocess.run(["git", "branch", "-a"], capture_output=True, text=True)
print(result.stdout)

對于復(fù)雜需求:
使用 GitRepositoryAdvancedGitManager 類,它們提供了:

  • 錯誤處理
  • 路徑擴展(支持 ~)
  • 上下文管理器(自動恢復(fù)目錄)
  • 更豐富的功能

注意事項:

  1. 路徑處理:使用 os.path.expanduser() 處理 ~
  2. 錯誤處理:總是檢查目錄是否存在
  3. 安全性:避免使用 shell=True,除非必要
  4. 資源管理:使用上下文管理器或確?;謴?fù)原始目錄

通過以上方法,你可以在 Python 中安全、有效地執(zhí)行 cdgit 命令。

以上就是Python執(zhí)行Linux命令的多種方法的詳細內(nèi)容,更多關(guān)于Python執(zhí)行Linux命令的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python Des加密解密如何實現(xiàn)軟件注冊碼機器碼

    Python Des加密解密如何實現(xiàn)軟件注冊碼機器碼

    這篇文章主要介紹了Python Des加密解密如何實現(xiàn)軟件注冊碼機器碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Python 圖片轉(zhuǎn)數(shù)組,二進制互轉(zhuǎn)操作

    Python 圖片轉(zhuǎn)數(shù)組,二進制互轉(zhuǎn)操作

    這篇文章主要介紹了Python 圖片轉(zhuǎn)數(shù)組,二進制互轉(zhuǎn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • pandas庫中?DataFrame的用法小結(jié)

    pandas庫中?DataFrame的用法小結(jié)

    這篇文章主要介紹了pandas庫中?DataFrame的用法,利用pandas.DataFrame可以構(gòu)建表格,通過列標屬性調(diào)用列對象,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • 詳解python變量的命名和使用

    詳解python變量的命名和使用

    變量名只能包含字母、數(shù)字和下劃線,本文主要介紹了詳解python變量的命名和使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • python實現(xiàn)地牢迷宮生成的完整步驟

    python實現(xiàn)地牢迷宮生成的完整步驟

    這篇文章主要給大家介紹了關(guān)于python實現(xiàn)地牢迷宮生成的相關(guān)資料,文中通過示例代碼將實現(xiàn)的過程一步步介紹的非常詳細,對大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-09-09
  • Python實現(xiàn)圖片查找輪廓、多邊形擬合、最小外接矩形代碼

    Python實現(xiàn)圖片查找輪廓、多邊形擬合、最小外接矩形代碼

    這篇文章主要介紹了Python實現(xiàn)圖片查找輪廓、多邊形擬合、最小外接矩形代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python中依賴管理工具使用終極指南(保姆級教程)

    Python中依賴管理工具使用終極指南(保姆級教程)

    在 Python 開發(fā)中,虛擬環(huán)境和包管理工具是必不可少的,由于Python的庫發(fā)展的非常快,工具也是日新月異,搜索會發(fā)現(xiàn)有pip,venv、Virtualenv、Conda、Pipenv、Poetry、UV等等,下面小編就來和大家詳細講講它們的具體使用吧
    2025-07-07
  • Python中集合的創(chuàng)建及常用函數(shù)的使用詳解

    Python中集合的創(chuàng)建及常用函數(shù)的使用詳解

    這篇文章主要為大家詳細介紹了Python中集合的創(chuàng)建、使用和遍歷,集合常見的操作函數(shù),集合與列表,元組,字典的嵌套,感興趣的小伙伴可以了解一下
    2022-06-06
  • Python干貨實戰(zhàn)之逆向登錄世界上最大的游戲平臺Stream

    Python干貨實戰(zhàn)之逆向登錄世界上最大的游戲平臺Stream

    有些網(wǎng)頁中的數(shù)據(jù)進行了算法加密 這些算法代碼是JavaScript 加密的地方就是在js文件里,我們需要破解這些算法加密 就需要了解這加密的過程 獲取加密過程中的代碼 然后進行后續(xù)的反反爬蟲操作
    2021-10-10
  • Python機器學(xué)習(xí)算法庫scikit-learn學(xué)習(xí)之決策樹實現(xiàn)方法詳解

    Python機器學(xué)習(xí)算法庫scikit-learn學(xué)習(xí)之決策樹實現(xiàn)方法詳解

    這篇文章主要介紹了Python機器學(xué)習(xí)算法庫scikit-learn學(xué)習(xí)之決策樹實現(xiàn)方法,結(jié)合實例形式分析了決策樹算法的原理及使用sklearn庫實現(xiàn)決策樹的相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07

最新評論

慈利县| 雷山县| 铜梁县| 那曲县| 兴义市| 从化市| 东台市| 昌吉市| 周口市| 土默特右旗| 应用必备| 阜康市| 隆安县| 航空| 那坡县| 红原县| 南澳县| 江山市| 通山县| 雅安市| 山阳县| 吉林市| 东山县| 贵溪市| 修武县| 略阳县| 囊谦县| 乌海市| 繁峙县| 扎兰屯市| 盘锦市| 铁力市| 广宗县| 曲沃县| 新和县| 勃利县| 台中县| 孝昌县| 大渡口区| 青海省| 延安市|