Python 3 re module. “cannot use a string pattern on a bytes-like object”. Mac changer












0














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.










share|improve this question
























  • Sounds like you have to convert you result from bytes to a string, maybe ifconfig_result.decode("utf8").
    – matt
    Nov 12 at 11:27
















0














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.










share|improve this question
























  • Sounds like you have to convert you result from bytes to a string, maybe ifconfig_result.decode("utf8").
    – matt
    Nov 12 at 11:27














0












0








0







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.










share|improve this question















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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


















  • 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












1 Answer
1






active

oldest

votes


















0














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()





share|improve this answer





















    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
    });


    }
    });














    draft saved

    draft discarded


















    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









    0














    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()





    share|improve this answer


























      0














      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()





      share|improve this answer
























        0












        0








        0






        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()





        share|improve this answer












        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()






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 12 at 11:27









        DeepSpace

        36.7k44169




        36.7k44169






























            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            Florida Star v. B. J. F.

            Danny Elfman

            Lugert, Oklahoma