Python 3 re module. “cannot use a string pattern on a bytes-like object”. Mac changer
I've built a program to change my Mac address.The following part works just fine:
import subprocess
import optparse
import re
def get_arguments():
parser = optparse.OptionParser()
parser.add_option("-i", "--interface", dest="interface", help="interface que terá seu Mac alterado")
parser.add_option("-n","--mac", dest = "new_mac", help="New Mac address")
(options, arguments) = parser.parse_args()
if not options.interface:
parser.error("[-] Please specify an interface. Use --help for more info")
elif not options.new_mac:
parser.error("[-] Please specify a Mac. Use --help for mmore info")
return options
def change_mac(interface, new_mac):
print("[+] Changing Mac address for " + interface + " to " + new_mac)
subprocess.call("sudo ip link set dev " + interface + " down", shell=True)
subprocess.call("sudo ip link set dev " + interface + " address " + new_mac, shell=True)
subprocess.call("sudo ip link set dev " + interface + " up", shell=True)
print("***************************************************")
options = get_arguments()
change_mac(options.interface, options.new_mac)
The problem is here:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface])
mac_address_search_result = re.search(r"ww:ww:ww:ww:ww:ww", ifconfig_result)
print(mac_address_search_result.group(0))
I'm receiving the following error when I try to run the program:
[+] Changing Mac address for enp5s0 to 00:1B:44:11:3A:B7
Traceback (most recent call last): File "mac_changer.py", line 31,
in
mac_address_search_result = re.search(r"ww:ww:ww:ww:ww:ww", ifconfig_result) File
"/usr/lib/python3.6/re.py", line 182, in search
return _compile(pattern, flags).search(string) TypeError: cannot use a string pattern on a bytes-like object
I know I don't need the re module, still I would like to use it.
python-3.x
add a comment |
I've built a program to change my Mac address.The following part works just fine:
import subprocess
import optparse
import re
def get_arguments():
parser = optparse.OptionParser()
parser.add_option("-i", "--interface", dest="interface", help="interface que terá seu Mac alterado")
parser.add_option("-n","--mac", dest = "new_mac", help="New Mac address")
(options, arguments) = parser.parse_args()
if not options.interface:
parser.error("[-] Please specify an interface. Use --help for more info")
elif not options.new_mac:
parser.error("[-] Please specify a Mac. Use --help for mmore info")
return options
def change_mac(interface, new_mac):
print("[+] Changing Mac address for " + interface + " to " + new_mac)
subprocess.call("sudo ip link set dev " + interface + " down", shell=True)
subprocess.call("sudo ip link set dev " + interface + " address " + new_mac, shell=True)
subprocess.call("sudo ip link set dev " + interface + " up", shell=True)
print("***************************************************")
options = get_arguments()
change_mac(options.interface, options.new_mac)
The problem is here:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface])
mac_address_search_result = re.search(r"ww:ww:ww:ww:ww:ww", ifconfig_result)
print(mac_address_search_result.group(0))
I'm receiving the following error when I try to run the program:
[+] Changing Mac address for enp5s0 to 00:1B:44:11:3A:B7
Traceback (most recent call last): File "mac_changer.py", line 31,
in
mac_address_search_result = re.search(r"ww:ww:ww:ww:ww:ww", ifconfig_result) File
"/usr/lib/python3.6/re.py", line 182, in search
return _compile(pattern, flags).search(string) TypeError: cannot use a string pattern on a bytes-like object
I know I don't need the re module, still I would like to use it.
python-3.x
Sounds like you have to convert you result from bytes to a string, maybe ifconfig_result.decode("utf8").
– matt
Nov 12 at 11:27
add a comment |
I've built a program to change my Mac address.The following part works just fine:
import subprocess
import optparse
import re
def get_arguments():
parser = optparse.OptionParser()
parser.add_option("-i", "--interface", dest="interface", help="interface que terá seu Mac alterado")
parser.add_option("-n","--mac", dest = "new_mac", help="New Mac address")
(options, arguments) = parser.parse_args()
if not options.interface:
parser.error("[-] Please specify an interface. Use --help for more info")
elif not options.new_mac:
parser.error("[-] Please specify a Mac. Use --help for mmore info")
return options
def change_mac(interface, new_mac):
print("[+] Changing Mac address for " + interface + " to " + new_mac)
subprocess.call("sudo ip link set dev " + interface + " down", shell=True)
subprocess.call("sudo ip link set dev " + interface + " address " + new_mac, shell=True)
subprocess.call("sudo ip link set dev " + interface + " up", shell=True)
print("***************************************************")
options = get_arguments()
change_mac(options.interface, options.new_mac)
The problem is here:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface])
mac_address_search_result = re.search(r"ww:ww:ww:ww:ww:ww", ifconfig_result)
print(mac_address_search_result.group(0))
I'm receiving the following error when I try to run the program:
[+] Changing Mac address for enp5s0 to 00:1B:44:11:3A:B7
Traceback (most recent call last): File "mac_changer.py", line 31,
in
mac_address_search_result = re.search(r"ww:ww:ww:ww:ww:ww", ifconfig_result) File
"/usr/lib/python3.6/re.py", line 182, in search
return _compile(pattern, flags).search(string) TypeError: cannot use a string pattern on a bytes-like object
I know I don't need the re module, still I would like to use it.
python-3.x
I've built a program to change my Mac address.The following part works just fine:
import subprocess
import optparse
import re
def get_arguments():
parser = optparse.OptionParser()
parser.add_option("-i", "--interface", dest="interface", help="interface que terá seu Mac alterado")
parser.add_option("-n","--mac", dest = "new_mac", help="New Mac address")
(options, arguments) = parser.parse_args()
if not options.interface:
parser.error("[-] Please specify an interface. Use --help for more info")
elif not options.new_mac:
parser.error("[-] Please specify a Mac. Use --help for mmore info")
return options
def change_mac(interface, new_mac):
print("[+] Changing Mac address for " + interface + " to " + new_mac)
subprocess.call("sudo ip link set dev " + interface + " down", shell=True)
subprocess.call("sudo ip link set dev " + interface + " address " + new_mac, shell=True)
subprocess.call("sudo ip link set dev " + interface + " up", shell=True)
print("***************************************************")
options = get_arguments()
change_mac(options.interface, options.new_mac)
The problem is here:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface])
mac_address_search_result = re.search(r"ww:ww:ww:ww:ww:ww", ifconfig_result)
print(mac_address_search_result.group(0))
I'm receiving the following error when I try to run the program:
[+] Changing Mac address for enp5s0 to 00:1B:44:11:3A:B7
Traceback (most recent call last): File "mac_changer.py", line 31,
in
mac_address_search_result = re.search(r"ww:ww:ww:ww:ww:ww", ifconfig_result) File
"/usr/lib/python3.6/re.py", line 182, in search
return _compile(pattern, flags).search(string) TypeError: cannot use a string pattern on a bytes-like object
I know I don't need the re module, still I would like to use it.
python-3.x
python-3.x
edited Nov 12 at 11:24
Sociopath
3,43281635
3,43281635
asked Nov 12 at 11:23
Eduardo Reis
103
103
Sounds like you have to convert you result from bytes to a string, maybe ifconfig_result.decode("utf8").
– matt
Nov 12 at 11:27
add a comment |
Sounds like you have to convert you result from bytes to a string, maybe ifconfig_result.decode("utf8").
– matt
Nov 12 at 11:27
Sounds like you have to convert you result from bytes to a string, maybe ifconfig_result.decode("utf8").
– matt
Nov 12 at 11:27
Sounds like you have to convert you result from bytes to a string, maybe ifconfig_result.decode("utf8").
– matt
Nov 12 at 11:27
add a comment |
1 Answer
1
active
oldest
votes
As the error suggests, ifconfig_result
is of type bytes
, but re.search
(and the other re
functions) expect str
.
You can fix this by simply converting ifconfig_result
to str
with decode
:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface]).decode()
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53261140%2fpython-3-re-module-cannot-use-a-string-pattern-on-a-bytes-like-object-mac-ch%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
As the error suggests, ifconfig_result
is of type bytes
, but re.search
(and the other re
functions) expect str
.
You can fix this by simply converting ifconfig_result
to str
with decode
:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface]).decode()
add a comment |
As the error suggests, ifconfig_result
is of type bytes
, but re.search
(and the other re
functions) expect str
.
You can fix this by simply converting ifconfig_result
to str
with decode
:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface]).decode()
add a comment |
As the error suggests, ifconfig_result
is of type bytes
, but re.search
(and the other re
functions) expect str
.
You can fix this by simply converting ifconfig_result
to str
with decode
:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface]).decode()
As the error suggests, ifconfig_result
is of type bytes
, but re.search
(and the other re
functions) expect str
.
You can fix this by simply converting ifconfig_result
to str
with decode
:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface]).decode()
answered Nov 12 at 11:27
DeepSpace
36.7k44169
36.7k44169
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53261140%2fpython-3-re-module-cannot-use-a-string-pattern-on-a-bytes-like-object-mac-ch%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Sounds like you have to convert you result from bytes to a string, maybe ifconfig_result.decode("utf8").
– matt
Nov 12 at 11:27