- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试从 Python 3 执行 sudo 命令。我通常使用子进程在 Python 中运行我的终端命令。已经有很多问题在讨论这个话题,但我找不到任何适合我的解决方案。
我的操作系统是 Ubuntu 18.04,我正在使用 Python 3.6 和 PyCharm。
无论我如何尝试,我都无法使用子进程输入密码。我的脚本总是在尝试输入 sudo 密码时卡住。在我意识到第一个答案之后,问题不在于我的代码,问题在于 PyCharm。从控制台运行时,以下所有尝试都工作正常,但当我从 PyCharm 解释器运行它们时,它们会卡住。以下是我尝试过的所有版本:
import subprocess
sudo_password = b"myPassword\n"
print(subprocess.check_output('sudo -S echo success', shell=True, input=sudo_password)) #stuck here
这似乎是解决问题的最简单方法,但不知何故子进程无法输入密码,它总是卡住,直到我杀死进程。
import subprocess
sudo_password = b"myPassword\n"
proc = subprocess.Popen('sudo -S echo success', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
proc.stdin.write(sudo_password)
proc.stdin.flush()
print(proc.stdout.readlines()) #stuck here
在我的第二次尝试中,我尝试自己处理内流,但似乎也没有用。程序在读取外流的行时会卡住。当我中止代码时,我收到以下错误消息,表明已提示控制台输入密码但无法输入密码。
Theo dõi (cuộc gọi gần đây nhất là cuộc gọi cuối cùng):
File "/home/anon/sudo.py", line 7, in
[sudo] password for anon: print(proc.stdout.readlines()) #stuck here
KeyboardInterrupt
我知道我可以将密码从终端传送到 sudo 命令:
anon@anon:~$ echo myPassword | sudo -S echo success
[sudo] password for anon: success
所以我尝试使用子进程做同样的事情:
import subprocess
sudo_password = "myPassword"
print(subprocess.check_output("echo {} | sudo -S echo success".format(sudo_password), shell=True)) #stuck here
但是,与所有其他方法一样,这种方法再次陷入困境。
import subprocess
nhập khẩu chúng
sudo_password = "myPassword"
with open("temp.sh", 'w') as file:
file.write("echo {} | sudo -S echo success".format(sudo_password))
print(subprocess.check_output("sh temp.sh", shell=True)) #stuck here
os.remove("temp.sh")
所以在我最后一次绝望的尝试中,我认为如果我将我的命令放入一个 shell 文件并使用子进程执行它,我可能会成功,因为我不会将任何 sudo 命令直接输入到子进程。当我自己在终端中尝试时,效果很好:
anon@anon:~$ sh temp.sh
[sudo] password for anon: success
但是 Python 脚本和以前一样卡在了同一个地方。
有谁知道为什么这些尝试失败了以及我如何才能实现我的目标?
有人给我链接了一篇有关此主题的旧帖子,该帖子使用 os 而不是子进程。 os 已被弃用,应该使用 subprocess 而不是这就是为什么我最初没有在这个问题中展示任何这些尝试,但在使用 os 时它也会卡住:
nhập khẩu chúng
sudo_password = "myPassword"
p = os.system('echo {} | sudo -S echo success'.format(sudo_password)) #stuck here
现在我想通了,如果您从终端运行脚本,我的所有尝试以及第一个答案中的建议实际上都有效:
anon@anon:~$ python3 checksudo.py
所以问题似乎出在我的解释器 PyCharm 上。这也是我的问题对 câu hỏi này 独一无二的原因。 ,因为他们的问题不是来自他们的口译员。
有没有人对如何使代码在 PyCharm 中工作有任何建议,还是我应该只从控制台运行我的所有脚本?
câu trả lời hay nhất
怎么样:
# mã hóa=utf-8
from subprocess import Popen, PIPE
sudo_password = 'mypass'
command = 'echo success'.split()
p = Popen(['sudo', '-S'] + command, stdin=PIPE, stderr=PIPE,
universal_newlines=True)
sudo_prompt = p.communicate(sudo_password + '\n')[1]
print('Done!')
当然,请确保您在代码中输入了正确的密码。
关于python - 在 PyCharm 中使用子进程执行 sudo 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224674/
Tôi biết tôi có thể thêm #noinspection PyPep8Naming trước loại, nhưng tôi không thể tìm ra cách đặt nó trên toàn cầu cho một tệp. Tôi nhận thấy chức năng này hoạt động trong một số IDE JetBrains khác nhưng không thành công trong P
Tôi nghĩ rằng việc tái cấu trúc tên hàm trong một mô-đun trong PyCharm nói chung sẽ cấu trúc lại bất kỳ việc sử dụng tên hàm đó trên toàn bộ dự án. Tuy nhiên, tôi nhận thấy rằng chức năng của sổ ghi chép trong dự án chưa được cấu trúc lại. Có cách nào để đưa sổ ghi chép vào khi tái cấu trúc không? Tôi nhận thấy jupyter n
Tôi cần sử dụng HTMLTestRunner để tạo báo cáo thử nghiệm vì mã này (ở cuối tệp) là: suite = unittest.TestLoader().loadTestsFromTestCase(Test
Lịch sử cục bộ là một tính năng hoàn toàn cơ bản/quan trọng của dòng IDE Jetbrains (bao gồm cả Pycharm). Tại sao thiếu tệp .ipynb? Đây là menu ngữ cảnh/nhấp chuột phải - nơi thiếu Show His
Khi câu hỏi đặt ra, làm cách nào để chạy từ tìm/thay thế trong pycharm trên toàn bộ dự án? Câu trả lời hay nhấtChỉnh sửa | Tìm Thay thế trong Đường dẫn. Phím tắt: Ctrl + Shift + R Giới thiệu về pycha
Gần đây tôi đã thay đổi từ Spyder sang PyCharm dưới dạng IDE Python. Trong Spyder, tôi thường sử dụng tính năng Variable Explorer (xem hình). Tính năng này cũng có sẵn trong PyCharm phải không? Tôi tìm thấy cái này ở đây,"
Xin chào, tôi đang sử dụng pycharm để phát triển python. Khi tôi mở dự án python của mình trong pycharm, nó sẽ mở ra như trong hình bên dưới, trong đó tên dự án của tôi là lựa chọn và các tab xuất hiện trước đó đều là các dự án mẹ.
Trong PyCharm, có một thư mục trong cửa sổ dự án của tôi có màu đỏ. Màu đó có nghĩa là gì khi tất cả các thư mục khác có màu xanh lam? Tôi có dự án của mình bằng Git, chủ yếu là Python, với GUI Java trong kho lưu trữ.
Tôi thấy điều này trong thanh tệp/dự án PyCharm của mình: Tôi không chắc điều này có nghĩa là gì hoặc tại sao tôi lại làm điều này. Google dường như không cung cấp bất kỳ thông tin hữu ích nào. Có ai biết nó là gì và làm thế nào để loại bỏ nó? Ngoài ra, không có con số nào khác trong dự án (không có
Có vẻ như việc thu gọn các vùng tùy chỉnh trong Pycharm không hoạt động sau các mức thụt lề nhất định. Điều này không có tác dụng: def test_a(): def function(): for g in group:
Bất cứ khi nào tôi tạo một hàm, hãy đặt nó thành Chế độ xem và ánh xạ mẫu tới hàm đó, tính năng tự động hoàn thành trong PyCharm sẽ hoạt động. Nếu bạn nhập nội dung nào đó như {{ book. }}, trong đó sách là mô hình và là một trong các đối tượng ngữ cảnh của bạn,
Từ lâu tôi đã tìm cách thu gọn các bình luận trong PyCharm. Về cơ bản, tôi đang tìm cách đạt được + nhận xét giống như các khối mã. Câu trả lời hay nhất Thực hiện việc này thật dễ dàng với #khu vực Mô tả
Tôi đang sử dụng PyCharm Community Edition 2016 và tôi nhận thấy rằng tôi không thể mở tệp hoặc nhật ký nhập dữ liệu lớn (20 MB). Người chỉnh sửa chỉ nói "Tệp XXX quá lớn (SIZE)". Không chỉ vậy, dường như không có cách nào để thay đổi giới hạn. Các tài liệu chính thức đề cập
Trong PyCharm, có một thư mục trong cửa sổ dự án của tôi có màu đỏ. Màu đó có nghĩa là gì khi tất cả các thư mục khác có màu xanh lam? Tôi có dự án của mình bằng Git, chủ yếu là Python, với GUI Java trong kho lưu trữ.
Tôi muốn sử dụng môi trường ảo riêng cho từng dự án ở Pycharm. Để làm điều này, tôi tạo một môi trường ảo cho từng dự án. Tôi không thể tìm thấy tài liệu rõ ràng nếu tôi cần kích hoạt/hủy kích hoạt các môi trường ảo này cho từng dự án khi tôi muốn thêm hoặc xóa nội dung thông qua lệnh PIP hoặc trong
Có tìm kiếm phân biệt chữ hoa chữ thường trong PyCharm không? Trước đây, tôi đã sử dụng một trình soạn thảo thực hiện tìm kiếm không phân biệt chữ hoa chữ thường nếu tôi sử dụng chữ cái viết thường. Khi tôi sử dụng ký tự viết hoa đầu tiên, tìm kiếm sẽ phân biệt chữ hoa chữ thường. Tôi thích điều này. Tôi có thể làm điều này trong PyC
Tôi đã làm theo hướng dẫn tại https://www.jetbrains.com/help/pycharm/requirements-installation-and-launching.html#linux
Vấn đề là gì? Tôi đang sử dụng trình thông dịch từ xa (không phải máy chủ gỡ lỗi!) trong PyCharm (phiên bản 2016.1.4) để gỡ lỗi từ xa như được mô tả ở đây: trang web jetbrains. Khi tôi chạy ở chế độ Gỡ lỗi, chương trình sẽ xuất hiện.
tldr;Tôi ước mình có thể nhập trạng thái chương trình cụ thể, sau đó dừng lại, sau đó tiếp tục chỉnh sửa cùng một tệp và sử dụng quy trình này để lặp đi lặp lại thêm mã vào tệp. Chi tiết: Điều tôi thường muốn làm là sử dụng bảng điều khiển python hoặc chạy một đoạn mã cụ thể trong trạng thái chương trình cụ thể.
Có cách nào để chọn tất cả các hàng bên dưới hàng hiện được chọn trong PyCharm (tương tự như cách trong Mac bạn có thể sử dụng Cmd + Shift + down để chọn hàng) không?
Tôi là một lập trình viên xuất sắc, rất giỏi!